{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Choropleth map and more analysis of CFPB consumer complaint data, downloaded on January 30, 2019.\n", "\n", "Exploring the CFPB data.\n", "\n", "Data Source: https://www.consumerfinance.gov/data-research/consumer-complaints/" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# import the CFPB data and 3 digit zip code data\n", "import pandas as pd\n", "import numpy as np\n", "df_cfpb = pd.read_csv('Consumer_Complaints.csv',low_memory=False)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "df_zip = pd.read_excel('zipcode.xlsx') # using 1st sheet for dataframe" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Date receivedProductSub-productIssueSub-issueConsumer complaint narrativeCompany public responseCompanyStateZIP codeTagsConsumer consent provided?Submitted viaDate sent to companyCompany response to consumerTimely response?Consumer disputed?Complaint ID
001/30/2019Checking or savings accountCD (Certificate of Deposit)Managing an accountFunds not handled or disbursed as instructedNaNNaNALLY FINANCIAL INC.MENaNOlder AmericanNaNWeb01/30/2019In progressYesNaN3137498
\n", "
" ], "text/plain": [ " Date received Product Sub-product \\\n", "0 01/30/2019 Checking or savings account CD (Certificate of Deposit) \n", "\n", " Issue Sub-issue \\\n", "0 Managing an account Funds not handled or disbursed as instructed \n", "\n", " Consumer complaint narrative Company public response Company \\\n", "0 NaN NaN ALLY FINANCIAL INC. \n", "\n", " State ZIP code Tags Consumer consent provided? Submitted via \\\n", "0 ME NaN Older American NaN Web \n", "\n", " Date sent to company Company response to consumer Timely response? \\\n", "0 01/30/2019 In progress Yes \n", "\n", " Consumer disputed? Complaint ID \n", "0 NaN 3137498 " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 1 line of CFPB data\n", "df_cfpb.head(1)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
prefix3‑Digit Destinations
0005MID-ISLAND NY 005
1012PITTSFIELD MA 012
2016WORCESTER MA 016U
3017CENTRAL MA 017
4024NORTHWEST BOS MA 024
\n", "
" ], "text/plain": [ " prefix 3‑Digit Destinations\n", "0 005 MID-ISLAND NY 005\n", "1 012 PITTSFIELD MA 012\n", "2 016 WORCESTER MA 016U\n", "3 017 CENTRAL MA 017\n", "4 024 NORTHWEST BOS MA 024" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 1st 5 of zipcode data\n", "df_zip.head()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['Date received', 'Product', 'Sub-product', 'Issue', 'Sub-issue',\n", " 'Consumer complaint narrative', 'Company public response', 'Company',\n", " 'State', 'ZIP code', 'Tags', 'Consumer consent provided?',\n", " 'Submitted via', 'Date sent to company', 'Company response to consumer',\n", " 'Timely response?', 'Consumer disputed?', 'Complaint ID'],\n", " dtype='object')" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_cfpb.columns" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# keep only the columns we need in CFPB data\n", "col_to_drop = ['Consumer complaint narrative','Company public response','Tags','Consumer consent provided?',\n", " 'Submitted via', 'Date sent to company', 'Company response to consumer',\n", " 'Timely response?', 'Consumer disputed?']\n", "df = df_cfpb.drop(col_to_drop,axis=1).copy()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# change dates to datetime values and create year grouping\n", "from datetime import datetime\n", "df['Date'] = df['Date received'].apply(lambda x: datetime.strptime(x, '%m/%d/%Y'))\n", "df['Year'] = df['Date'].apply(lambda x: x.strftime('%Y')).copy()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# keep only 2018 data and banks\n", "def company_type(x):\n", " if x == 'EQUIFAX, INC.':\n", " return 'Credit Union'\n", " elif x == 'Experian Information Solutions Inc.':\n", " return 'Credit Union'\n", " elif x == 'TRANSUNION INTERMEDIATE HOLDINGS, INC.':\n", " return 'Credit Union'\n", " else:\n", " return 'Bank'\n", "df['Type'] = df['Company'].apply(company_type)\n", "df_bb = df[(df['Type']=='Bank') & (df['Year'] == '2018')].copy()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Sort dates and reset index\n", "df_bb.sort_values(by='Date',ascending=True,inplace=True)\n", "df_bb.reset_index(inplace=True,drop=True)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# create common zip code column for both dataframes\n", "df_bb['ZIP code'] = df_bb['ZIP code'].astype(str)\n", "df_bb['zip3'] = df_bb['ZIP code'].apply(lambda x: x[:3])\n", "df_zip['prefix'] = df_zip['prefix'].astype(str)\n", "df_zip['zip3'] = df_zip['prefix'].apply(lambda x: x[:3])" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Date receivedProductSub-productIssueSub-issueCompanyStateZIP codeComplaint IDDateYearTypezip3
001/01/2018Debt collectionCredit card debtAttempts to collect debt not owedDebt was paidSYNCHRONY FINANCIALTX751XX27687472018-01-012018Bank751
\n", "
" ], "text/plain": [ " Date received Product Sub-product \\\n", "0 01/01/2018 Debt collection Credit card debt \n", "\n", " Issue Sub-issue Company \\\n", "0 Attempts to collect debt not owed Debt was paid SYNCHRONY FINANCIAL \n", "\n", " State ZIP code Complaint ID Date Year Type zip3 \n", "0 TX 751XX 2768747 2018-01-01 2018 Bank 751 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# check if there is a new zip3 column\n", "df_bb.head(1)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "# set zip code file index to zip3 column just created and reset index for later mapping \n", "df_zip.set_index('zip3',inplace=True)\n", "df_zip.reset_index(inplace=True)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
zip3prefix3‑Digit Destinations
0005005MID-ISLAND NY 005
\n", "
" ], "text/plain": [ " zip3 prefix 3‑Digit Destinations\n", "0 005 005 MID-ISLAND NY 005" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_zip.head(1)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "# we don't need the prefix column\n", "df_zip.drop(columns='prefix',inplace=True)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "# map destination to zip code\n", "mapping = dict(df_zip[['zip3','3‑Digit Destinations']].values)\n", "df_bb['loc'] = df_bb.zip3.map(mapping)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Date receivedProductSub-productIssueSub-issueCompanyStateZIP codeComplaint IDDateYearTypezip3loc
001/01/2018Debt collectionCredit card debtAttempts to collect debt not owedDebt was paidSYNCHRONY FINANCIALTX751XX27687472018-01-012018Bank751DALLAS TX 751
101/01/2018MortgageFHA mortgageTrouble during payment processNaNHOMEBRIDGE FINANCIAL SERVICES, INC.PA191XX27689352018-01-012018Bank191PHILADELPHIA PA 191U
201/01/2018Money transfer, virtual currency, or money ser...Mobile or digital walletConfusing or missing disclosuresNaNGoogle Compare Credit Cards Inc.NY1151627685552018-01-012018Bank115WESTERN NASSAU NY 115
\n", "
" ], "text/plain": [ " Date received Product \\\n", "0 01/01/2018 Debt collection \n", "1 01/01/2018 Mortgage \n", "2 01/01/2018 Money transfer, virtual currency, or money ser... \n", "\n", " Sub-product Issue Sub-issue \\\n", "0 Credit card debt Attempts to collect debt not owed Debt was paid \n", "1 FHA mortgage Trouble during payment process NaN \n", "2 Mobile or digital wallet Confusing or missing disclosures NaN \n", "\n", " Company State ZIP code Complaint ID \\\n", "0 SYNCHRONY FINANCIAL TX 751XX 2768747 \n", "1 HOMEBRIDGE FINANCIAL SERVICES, INC. PA 191XX 2768935 \n", "2 Google Compare Credit Cards Inc. NY 11516 2768555 \n", "\n", " Date Year Type zip3 loc \n", "0 2018-01-01 2018 Bank 751 DALLAS TX 751 \n", "1 2018-01-01 2018 Bank 191 PHILADELPHIA PA 191U \n", "2 2018-01-01 2018 Bank 115 WESTERN NASSAU NY 115 " ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# check if mapping worked\n", "df_bb.head(3)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "25525" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# how many nan data points in loc column\n", "df_bb[df_bb['loc'].isnull()]['Complaint ID'].count() " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "INFORMATION GATHERING" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "NORTH METRO GA 300 2695\n", "CHICAGO IL 606U 2106\n", "HOUSTON TX 770U 2101\n", "NORTH TEXAS TX 750 1907\n", "LOS ANGELES CA 900U 1826\n", "Name: loc, dtype: int64" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Top 5 metros with the most complaints \n", "df_bb['loc'].value_counts().head()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "JPMORGAN CHASE & CO. 8906\n", "WELLS FARGO & COMPANY 8789\n", "BANK OF AMERICA, NATIONAL ASSOCIATION 8331\n", "CAPITAL ONE FINANCIAL CORPORATION 7680\n", "CITIBANK, N.A. 7260\n", "Name: Company, dtype: int64" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Top 5 companies with the most complaints \n", "df_bb['Company'].value_counts().head()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "300XX 1299\n", "770XX 1067\n", "750XX 955\n", "606XX 904\n", "900XX 838\n", "Name: ZIP code, dtype: int64" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Top 5 zip with the most complaints \n", "df_bb[df_bb['loc'].notnull()]['ZIP code'].value_counts().head()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "CA 22178\n", "FL 16285\n", "TX 15081\n", "NY 11030\n", "GA 8392\n", "Name: State, dtype: int64" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Top 5 states with the most complaints \n", "df_bb['State'].value_counts().head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Examine the top issues for each product and other groupings" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Debt collection 48502\n", "Credit reporting, credit repair services, or other personal consumer reports 26224\n", "Mortgage 24551\n", "Credit card or prepaid card 24115\n", "Checking or savings account 21225\n", "Student loan 8770\n", "Vehicle loan or lease 5856\n", "Money transfer, virtual currency, or money service 5427\n", "Payday loan, title loan, or personal loan 4362\n", "Name: Product, dtype: int64" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_bb['Product'].value_counts()" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Trouble during payment process 11409\n", "Struggling to pay mortgage 8645\n", "Applying for a mortgage or refinancing an existing mortgage 1927\n", "Closing on a mortgage 1640\n", "Incorrect information on your report 518\n", "Name: Issue, dtype: int64" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_bb[df_bb['Product'] == 'Mortgage']['Issue'].value_counts().head()" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Problem with a purchase shown on your statement 5861\n", "Other features, terms, or problems 3140\n", "Fees or interest 3135\n", "Problem when making payments 2302\n", "Getting a credit card 2225\n", "Name: Issue, dtype: int64" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_bb[df_bb['Product'] == 'Credit card or prepaid card']['Issue'].value_counts().head()" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Attempts to collect debt not owed 20235\n", "Written notification about debt 12064\n", "Communication tactics 6014\n", "Took or threatened to take negative or legal action 4595\n", "False statements or representation 4247\n", "Name: Issue, dtype: int64" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_bb[df_bb['Product'] == 'Debt collection']['Issue'].value_counts().head()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Incorrect information on your report 14501\n", "Improper use of your report 5432\n", "Problem with a credit reporting company's investigation into an existing problem 5029\n", "Credit monitoring or identity theft protection services 321\n", "Unable to get your credit report or credit score 250\n", "Name: Issue, dtype: int64" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_bb[df_bb['Product'] == 'Credit reporting, credit repair services, or other personal consumer reports'\n", " ]['Issue'].value_counts().head()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Managing an account 13425\n", "Closing an account 2263\n", "Opening an account 1929\n", "Problem caused by your funds being low 1812\n", "Problem with a lender or other company charging your account 1616\n", "Name: Issue, dtype: int64" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_bb[df_bb['Product'] == 'Checking or savings account']['Issue'].value_counts().head()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "BANK OF AMERICA, NATIONAL ASSOCIATION 2260\n", "JPMORGAN CHASE & CO. 1841\n", "WELLS FARGO & COMPANY 1567\n", "CAPITAL ONE FINANCIAL CORPORATION 691\n", "CITIBANK, N.A. 679\n", "Name: Company, dtype: int64" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# top companies that have complaints managing an account\n", "df_bb[df_bb['Issue'] == 'Managing an account']['Company'].value_counts().head()" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "NEW YORK NY 100U 45\n", "BROOKLYN NY 112U 40\n", "OAKLAND CA 945 36\n", "NORTH TEXAS TX 750 32\n", "CHICAGO IL 606U 30\n", "Name: loc, dtype: int64" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#top locations for fees or interest complaints\n", "df_bb[df_bb['Issue'] == 'Fees or interest']['loc'].value_counts().head()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "NORTH METRO GA 300 194\n", "SOUTHERN MD MD 207 113\n", "SANTA ANA CA 926 108\n", "OAKLAND CA 945 104\n", "SOUTH FLORIDA FL 330 100\n", "Name: loc, dtype: int64" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Locations where struggling to pay mortgage is a complaint\n", "df_bb[df_bb['Issue'] == 'Struggling to pay mortgage']['loc'].value_counts().head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Data Visualization" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "# import plot libraries for visualizations\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "sns.set_style('whitegrid')\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [], "source": [ "# create new dataframe with only mortgage product complaints for 2018\n", "df_mort = df_bb[df_bb['Product'] == 'Mortgage'].copy()" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "# dataframe of total mortgage complaints by state\n", "compl_by_state = pd.pivot_table(df_mort,index=['State'], values=['Complaint ID'],aggfunc = len)" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Complaint ID
State
AA2
AE7
AK34
AL224
AP4
\n", "
" ], "text/plain": [ " Complaint ID\n", "State \n", "AA 2\n", "AE 7\n", "AK 34\n", "AL 224\n", "AP 4" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compl_by_state.head()" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [], "source": [ "compl_by_state.reset_index(inplace=True)" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "# create pivot table at state and issue to figure out top issue for mortgages in that state\n", "top_issu = pd.pivot_table(df_mort,index=['State','Issue'], values=['Complaint ID'],aggfunc = len)" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "top_issu = top_issu['Complaint ID'].unstack(0).T" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [], "source": [ "# Find issue by highest # of complaints\n", "top_issu['TopIss'] = top_issu.idxmax(axis=1)" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [], "source": [ "# find # of complaints for TopIss\n", "top_issu['Max'] = top_issu.max(axis=1)" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IssueApplying for a mortgageApplying for a mortgage or refinancing an existing mortgageClosing on a mortgageCredit monitoring or identity theft protection servicesImproper use of your reportIncorrect information on your reportProblem with a credit reporting company's investigation into an existing problemProblem with fraud alerts or security freezesStruggling to pay mortgageTrouble during payment processUnable to get your credit report or credit scoreTopIssMax
State
AANaNNaNNaNNaNNaNNaNNaNNaNNaN2.0NaNTrouble during payment process2.0
AENaNNaNNaNNaNNaNNaNNaNNaN2.05.0NaNTrouble during payment process5.0
AK1.02.04.0NaNNaNNaN1.0NaN13.013.0NaNStruggling to pay mortgage13.0
AL2.024.015.01.0NaN6.02.0NaN64.0110.0NaNTrouble during payment process110.0
APNaNNaNNaNNaNNaNNaNNaNNaN2.02.0NaNStruggling to pay mortgage2.0
\n", "
" ], "text/plain": [ "Issue Applying for a mortgage \\\n", "State \n", "AA NaN \n", "AE NaN \n", "AK 1.0 \n", "AL 2.0 \n", "AP NaN \n", "\n", "Issue Applying for a mortgage or refinancing an existing mortgage \\\n", "State \n", "AA NaN \n", "AE NaN \n", "AK 2.0 \n", "AL 24.0 \n", "AP NaN \n", "\n", "Issue Closing on a mortgage \\\n", "State \n", "AA NaN \n", "AE NaN \n", "AK 4.0 \n", "AL 15.0 \n", "AP NaN \n", "\n", "Issue Credit monitoring or identity theft protection services \\\n", "State \n", "AA NaN \n", "AE NaN \n", "AK NaN \n", "AL 1.0 \n", "AP NaN \n", "\n", "Issue Improper use of your report Incorrect information on your report \\\n", "State \n", "AA NaN NaN \n", "AE NaN NaN \n", "AK NaN NaN \n", "AL NaN 6.0 \n", "AP NaN NaN \n", "\n", "Issue Problem with a credit reporting company's investigation into an existing problem \\\n", "State \n", "AA NaN \n", "AE NaN \n", "AK 1.0 \n", "AL 2.0 \n", "AP NaN \n", "\n", "Issue Problem with fraud alerts or security freezes \\\n", "State \n", "AA NaN \n", "AE NaN \n", "AK NaN \n", "AL NaN \n", "AP NaN \n", "\n", "Issue Struggling to pay mortgage Trouble during payment process \\\n", "State \n", "AA NaN 2.0 \n", "AE 2.0 5.0 \n", "AK 13.0 13.0 \n", "AL 64.0 110.0 \n", "AP 2.0 2.0 \n", "\n", "Issue Unable to get your credit report or credit score \\\n", "State \n", "AA NaN \n", "AE NaN \n", "AK NaN \n", "AL NaN \n", "AP NaN \n", "\n", "Issue TopIss Max \n", "State \n", "AA Trouble during payment process 2.0 \n", "AE Trouble during payment process 5.0 \n", "AK Struggling to pay mortgage 13.0 \n", "AL Trouble during payment process 110.0 \n", "AP Struggling to pay mortgage 2.0 " ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "top_issu.head()" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [], "source": [ "top_issu.reset_index(inplace=True)" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['State', 'Applying for a mortgage',\n", " 'Applying for a mortgage or refinancing an existing mortgage',\n", " 'Closing on a mortgage',\n", " 'Credit monitoring or identity theft protection services',\n", " 'Improper use of your report', 'Incorrect information on your report',\n", " 'Problem with a credit reporting company's investigation into an existing problem',\n", " 'Problem with fraud alerts or security freezes',\n", " 'Struggling to pay mortgage', 'Trouble during payment process',\n", " 'Unable to get your credit report or credit score', 'TopIss', 'Max'],\n", " dtype='object', name='Issue')" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "top_issu.columns" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [], "source": [ "# add new column - tot # of mortgage product complaints by state\n", "data_tot_compl = dict(compl_by_state[['State','Complaint ID']].values)\n", "top_issu['totCompl'] = top_issu.State.map(data_tot_compl)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [], "source": [ "top_issu.sort_values(by='totCompl',inplace=True,ascending=False)" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [], "source": [ "top_issu['MaxPerc'] = top_issu['Max'] / top_issu['totCompl'] * 100" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [], "source": [ "top_issu.sort_values(by='totCompl',inplace=True,ascending=False)\n", "top_issu.reset_index(drop=True,inplace=True)" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IssueStateApplying for a mortgageApplying for a mortgage or refinancing an existing mortgageClosing on a mortgageCredit monitoring or identity theft protection servicesImproper use of your reportIncorrect information on your reportProblem with a credit reporting company's investigation into an existing problemProblem with fraud alerts or security freezesStruggling to pay mortgageTrouble during payment processUnable to get your credit report or credit scoreTopIssMaxtotComplMaxPerc
0CA29.0299.0231.04.06.060.020.01.01479.01497.02.0Trouble during payment process1497.0362841.262404
1FL24.0217.0162.01.03.068.013.0NaN718.01236.0NaNTrouble during payment process1236.0244250.614251
2TX10.0133.0127.0NaN2.049.08.0NaN523.0767.02.0Trouble during payment process767.0162147.316471
3NY15.089.0118.0NaN2.026.09.0NaN622.0645.0NaNTrouble during payment process645.0152642.267366
4NJ11.078.047.0NaNNaN19.03.0NaN473.0558.0NaNTrouble during payment process558.0118946.930193
\n", "
" ], "text/plain": [ "Issue State Applying for a mortgage \\\n", "0 CA 29.0 \n", "1 FL 24.0 \n", "2 TX 10.0 \n", "3 NY 15.0 \n", "4 NJ 11.0 \n", "\n", "Issue Applying for a mortgage or refinancing an existing mortgage \\\n", "0 299.0 \n", "1 217.0 \n", "2 133.0 \n", "3 89.0 \n", "4 78.0 \n", "\n", "Issue Closing on a mortgage \\\n", "0 231.0 \n", "1 162.0 \n", "2 127.0 \n", "3 118.0 \n", "4 47.0 \n", "\n", "Issue Credit monitoring or identity theft protection services \\\n", "0 4.0 \n", "1 1.0 \n", "2 NaN \n", "3 NaN \n", "4 NaN \n", "\n", "Issue Improper use of your report Incorrect information on your report \\\n", "0 6.0 60.0 \n", "1 3.0 68.0 \n", "2 2.0 49.0 \n", "3 2.0 26.0 \n", "4 NaN 19.0 \n", "\n", "Issue Problem with a credit reporting company's investigation into an existing problem \\\n", "0 20.0 \n", "1 13.0 \n", "2 8.0 \n", "3 9.0 \n", "4 3.0 \n", "\n", "Issue Problem with fraud alerts or security freezes \\\n", "0 1.0 \n", "1 NaN \n", "2 NaN \n", "3 NaN \n", "4 NaN \n", "\n", "Issue Struggling to pay mortgage Trouble during payment process \\\n", "0 1479.0 1497.0 \n", "1 718.0 1236.0 \n", "2 523.0 767.0 \n", "3 622.0 645.0 \n", "4 473.0 558.0 \n", "\n", "Issue Unable to get your credit report or credit score \\\n", "0 2.0 \n", "1 NaN \n", "2 2.0 \n", "3 NaN \n", "4 NaN \n", "\n", "Issue TopIss Max totCompl MaxPerc \n", "0 Trouble during payment process 1497.0 3628 41.262404 \n", "1 Trouble during payment process 1236.0 2442 50.614251 \n", "2 Trouble during payment process 767.0 1621 47.316471 \n", "3 Trouble during payment process 645.0 1526 42.267366 \n", "4 Trouble during payment process 558.0 1189 46.930193 " ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# check if we added new columns correctly of total complaints for each state and top issue as % of total compl\n", "top_issu.head()" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [], "source": [ "# create top location for mortgage complaints\n", "top_loc = pd.pivot_table(df_mort,index=['State','loc'], values=['Complaint ID'],aggfunc = len)" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [], "source": [ "top_loc = top_loc['Complaint ID'].unstack(0).T\n", "# Find loc by highest # of complaints\n", "top_loc['Toploc'] = top_loc.idxmax(axis=1)\n", "# find # of complaints for Top location\n", "top_loc['Max'] = top_loc.max(axis=1)" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [], "source": [ "top_loc.reset_index(inplace=True)" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
locStateABILENE TX 768ABILENE TX 796UAKRON OH 442AKRON OH 443UALAMOGORDO NM 883ALAMOSA CO 811ALBANY GA 317ALBANY GA 398ALBANY NY 120...WORLAND WY 824YAKIMA WA 989YONKERS NY 107UYORK PA 174UYOUNGSTOWN OH 444YOUNGSTOWN OH 445UZANESVILLE OH 437ZANESVILLE OH 438ToplocMax
0AANaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNAPO/FPO AA 3401.0
1AENaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNAPO/FPO AE 0962.0
2AKNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNANCHORAGE AK 99515.0
3ALNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNMOBILE AL 36518.0
4APNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNAPO/FPO AP 9623.0
\n", "

5 rows × 787 columns

\n", "
" ], "text/plain": [ "loc State ABILENE TX 768 ABILENE TX 796U AKRON OH 442 AKRON OH 443U \\\n", "0 AA NaN NaN NaN NaN \n", "1 AE NaN NaN NaN NaN \n", "2 AK NaN NaN NaN NaN \n", "3 AL NaN NaN NaN NaN \n", "4 AP NaN NaN NaN NaN \n", "\n", "loc ALAMOGORDO NM 883 ALAMOSA CO 811 ALBANY GA 317 ALBANY GA 398 \\\n", "0 NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN \n", "2 NaN NaN NaN NaN \n", "3 NaN NaN NaN NaN \n", "4 NaN NaN NaN NaN \n", "\n", "loc ALBANY NY 120 ... WORLAND WY 824 YAKIMA WA 989 YONKERS NY 107U \\\n", "0 NaN ... NaN NaN NaN \n", "1 NaN ... NaN NaN NaN \n", "2 NaN ... NaN NaN NaN \n", "3 NaN ... NaN NaN NaN \n", "4 NaN ... NaN NaN NaN \n", "\n", "loc YORK PA 174U YOUNGSTOWN OH 444 YOUNGSTOWN OH 445U ZANESVILLE OH 437 \\\n", "0 NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN \n", "2 NaN NaN NaN NaN \n", "3 NaN NaN NaN NaN \n", "4 NaN NaN NaN NaN \n", "\n", "loc ZANESVILLE OH 438 Toploc Max \n", "0 NaN APO/FPO AA 340 1.0 \n", "1 NaN APO/FPO AE 096 2.0 \n", "2 NaN ANCHORAGE AK 995 15.0 \n", "3 NaN MOBILE AL 365 18.0 \n", "4 NaN APO/FPO AP 962 3.0 \n", "\n", "[5 rows x 787 columns]" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "top_loc.head()" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['State', 'ABILENE TX 768', 'ABILENE TX 796U', 'AKRON OH 442',\n", " 'AKRON OH 443U', 'ALAMOGORDO NM 883', 'ALAMOSA CO 811', 'ALBANY GA 317',\n", " 'ALBANY GA 398', 'ALBANY NY 120',\n", " ...\n", " 'WORLAND WY 824', 'YAKIMA WA 989', 'YONKERS NY 107U', 'YORK PA 174U',\n", " 'YOUNGSTOWN OH 444', 'YOUNGSTOWN OH 445U', 'ZANESVILLE OH 437',\n", " 'ZANESVILLE OH 438', 'Toploc', 'Max'],\n", " dtype='object', name='loc', length=787)" ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ "top_loc.columns" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [], "source": [ "# create new dataframe with 1st, 2nd to last and last columns\n", "location = top_loc.iloc[:,[0,-2]]" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
locStateToploc
0AAAPO/FPO AA 340
1AEAPO/FPO AE 096
\n", "
" ], "text/plain": [ "loc State Toploc\n", "0 AA APO/FPO AA 340\n", "1 AE APO/FPO AE 096" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "location.head(2)" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [], "source": [ "chart = top_issu.iloc[:,[0,-4,-3,-2,-1]].copy()" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IssueStateTopIssMaxtotComplMaxPerc
0CATrouble during payment process1497.0362841.262404
1FLTrouble during payment process1236.0244250.614251
2TXTrouble during payment process767.0162147.316471
3NYTrouble during payment process645.0152642.267366
4NJTrouble during payment process558.0118946.930193
\n", "
" ], "text/plain": [ "Issue State TopIss Max totCompl MaxPerc\n", "0 CA Trouble during payment process 1497.0 3628 41.262404\n", "1 FL Trouble during payment process 1236.0 2442 50.614251\n", "2 TX Trouble during payment process 767.0 1621 47.316471\n", "3 NY Trouble during payment process 645.0 1526 42.267366\n", "4 NJ Trouble during payment process 558.0 1189 46.930193" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "chart.head()" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [], "source": [ "# add new column - top location\n", "dict_toploc = dict(location[['State','Toploc']].values)\n", "chart['toploc'] = chart.State.map(dict_toploc)" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [], "source": [ "# Grab US states for chart\n", "chart_geo = chart.iloc[:52,:].copy()" ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [], "source": [ "# need to remove Puerto Rico\n", "chart_geo_50 = chart_geo[chart_geo['State'] != 'PR'].copy()" ] }, { "cell_type": "code", "execution_count": 101, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int64Index: 51 entries, 0 to 51\n", "Data columns (total 6 columns):\n", "State 51 non-null object\n", "TopIss 51 non-null object\n", "Max 51 non-null float64\n", "totCompl 51 non-null int64\n", "MaxPerc 51 non-null float64\n", "toploc 51 non-null object\n", "dtypes: float64(2), int64(1), object(3)\n", "memory usage: 2.8+ KB\n" ] } ], "source": [ "chart_geo_50.info()" ] }, { "cell_type": "code", "execution_count": 102, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IssueStateTopIssMaxtotComplMaxPerctoploc
0CATrouble during payment process1497.0362841.3OAKLAND CA 945
1FLTrouble during payment process1236.0244250.6SOUTH FLORIDA FL 330
2TXTrouble during payment process767.0162147.3NORTH TEXAS TX 750
3NYTrouble during payment process645.0152642.3MID-ISLAND NY 117
4NJTrouble during payment process558.0118946.9SOUTH JERSEY NJ 080
\n", "
" ], "text/plain": [ "Issue State TopIss Max totCompl MaxPerc \\\n", "0 CA Trouble during payment process 1497.0 3628 41.3 \n", "1 FL Trouble during payment process 1236.0 2442 50.6 \n", "2 TX Trouble during payment process 767.0 1621 47.3 \n", "3 NY Trouble during payment process 645.0 1526 42.3 \n", "4 NJ Trouble during payment process 558.0 1189 46.9 \n", "\n", "Issue toploc \n", "0 OAKLAND CA 945 \n", "1 SOUTH FLORIDA FL 330 \n", "2 NORTH TEXAS TX 750 \n", "3 MID-ISLAND NY 117 \n", "4 SOUTH JERSEY NJ 080 " ] }, "execution_count": 102, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.options.display.float_format = '{:.1f}'.format\n", "chart_geo_50.head()" ] }, { "cell_type": "code", "execution_count": 103, "metadata": {}, "outputs": [], "source": [ "# create string %\n", "chart_geo_50['chperc'] = chart_geo_50['MaxPerc'].apply(lambda x: '{0:.1f}%'.format(x))" ] }, { "cell_type": "code", "execution_count": 104, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IssueStateTopIssMaxtotComplMaxPerctoplocchperc
0CATrouble during payment process1497.0362841.3OAKLAND CA 94541.3%
1FLTrouble during payment process1236.0244250.6SOUTH FLORIDA FL 33050.6%
2TXTrouble during payment process767.0162147.3NORTH TEXAS TX 75047.3%
3NYTrouble during payment process645.0152642.3MID-ISLAND NY 11742.3%
4NJTrouble during payment process558.0118946.9SOUTH JERSEY NJ 08046.9%
\n", "
" ], "text/plain": [ "Issue State TopIss Max totCompl MaxPerc \\\n", "0 CA Trouble during payment process 1497.0 3628 41.3 \n", "1 FL Trouble during payment process 1236.0 2442 50.6 \n", "2 TX Trouble during payment process 767.0 1621 47.3 \n", "3 NY Trouble during payment process 645.0 1526 42.3 \n", "4 NJ Trouble during payment process 558.0 1189 46.9 \n", "\n", "Issue toploc chperc \n", "0 OAKLAND CA 945 41.3% \n", "1 SOUTH FLORIDA FL 330 50.6% \n", "2 NORTH TEXAS TX 750 47.3% \n", "3 MID-ISLAND NY 117 42.3% \n", "4 SOUTH JERSEY NJ 080 46.9% " ] }, "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ "chart_geo_50.head()" ] }, { "cell_type": "code", "execution_count": 105, "metadata": {}, "outputs": [], "source": [ "# create column for text in each state\n", "chart_geo_50['text'] = chart_geo_50.iloc[:,1] + ', '+ chart_geo_50.iloc[:,-1]+', '+ chart_geo_50.iloc[:,-2] \n" ] }, { "cell_type": "code", "execution_count": 106, "metadata": {}, "outputs": [], "source": [ "# rename columns for clarity\n", "chart_geo_50.rename(columns={'TopIss': 'Top Issue', 'totCompl': 'Total Complaints'}, inplace=True)" ] }, { "cell_type": "code", "execution_count": 107, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IssueStateTop IssueMaxTotal ComplaintsMaxPerctoplocchperctext
0CATrouble during payment process1497.0362841.3OAKLAND CA 94541.3%Trouble during payment process, 41.3%, OAKLAND...
1FLTrouble during payment process1236.0244250.6SOUTH FLORIDA FL 33050.6%Trouble during payment process, 50.6%, SOUTH F...
2TXTrouble during payment process767.0162147.3NORTH TEXAS TX 75047.3%Trouble during payment process, 47.3%, NORTH T...
3NYTrouble during payment process645.0152642.3MID-ISLAND NY 11742.3%Trouble during payment process, 42.3%, MID-ISL...
4NJTrouble during payment process558.0118946.9SOUTH JERSEY NJ 08046.9%Trouble during payment process, 46.9%, SOUTH J...
\n", "
" ], "text/plain": [ "Issue State Top Issue Max Total Complaints MaxPerc \\\n", "0 CA Trouble during payment process 1497.0 3628 41.3 \n", "1 FL Trouble during payment process 1236.0 2442 50.6 \n", "2 TX Trouble during payment process 767.0 1621 47.3 \n", "3 NY Trouble during payment process 645.0 1526 42.3 \n", "4 NJ Trouble during payment process 558.0 1189 46.9 \n", "\n", "Issue toploc chperc \\\n", "0 OAKLAND CA 945 41.3% \n", "1 SOUTH FLORIDA FL 330 50.6% \n", "2 NORTH TEXAS TX 750 47.3% \n", "3 MID-ISLAND NY 117 42.3% \n", "4 SOUTH JERSEY NJ 080 46.9% \n", "\n", "Issue text \n", "0 Trouble during payment process, 41.3%, OAKLAND... \n", "1 Trouble during payment process, 50.6%, SOUTH F... \n", "2 Trouble during payment process, 47.3%, NORTH T... \n", "3 Trouble during payment process, 42.3%, MID-ISL... \n", "4 Trouble during payment process, 46.9%, SOUTH J... " ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "chart_geo_50.head()" ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [], "source": [ "import plotly.plotly as py\n", "import plotly.graph_objs as go \n", "from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot" ] }, { "cell_type": "code", "execution_count": 109, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/vnd.plotly.v1+html": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "init_notebook_mode(connected=True) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Create the Choropleth Map" ] }, { "cell_type": "code", "execution_count": 110, "metadata": {}, "outputs": [], "source": [ "data = dict(type='choropleth',\n", " colorscale = 'Viridis',\n", " reversescale = True,\n", " locations = chart_geo_50['State'],\n", " z = chart_geo_50['Total Complaints'],\n", " locationmode = 'USA-states',\n", " text = chart_geo_50['text'],\n", " marker = dict(line = dict(color = 'rgb(255,255,255)',width = 1)),\n", " colorbar = {'title':\"Total Mortgage Product Complaints\"}\n", " ) " ] }, { "cell_type": "code", "execution_count": 111, "metadata": {}, "outputs": [], "source": [ "layout = dict(title = 'CFPB Total Mortgage Product Complaints by State in 2018',\n", " geo = dict(scope='usa',\n", " showlakes = True,\n", " lakecolor = 'rgb(85,173,240)')\n", " )" ] }, { "cell_type": "code", "execution_count": 112, "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "linkText": "Export to plot.ly", "plotlyServerURL": "https://plot.ly", "showLink": true }, "data": [ { "colorbar": { "title": { "text": "Total Mortgage Product Complaints" } }, "colorscale": "Viridis", "locationmode": "USA-states", "locations": [ "CA", "FL", "TX", "NY", "NJ", "GA", "PA", "MD", "IL", "VA", "NC", "MA", "WA", "OH", "AZ", "MI", "CO", "TN", "CT", "SC", "MO", "LA", "NV", "IN", "OR", "MN", "WI", "AL", "OK", "UT", "DE", "KY", "MS", "DC", "NH", "IA", "NM", "AR", "RI", "KS", "HI", "ME", "ID", "NE", "MT", "WV", "VT", "AK", "WY", "SD", "ND" ], "marker": { "line": { "color": "rgb(255,255,255)", "width": 1 } }, "reversescale": true, "text": [ "Trouble during payment process, 41.3%, OAKLAND CA 945", "Trouble during payment process, 50.6%, SOUTH FLORIDA FL 330", "Trouble during payment process, 47.3%, NORTH TEXAS TX 750", "Trouble during payment process, 42.3%, MID-ISLAND NY 117", "Trouble during payment process, 46.9%, SOUTH JERSEY NJ 080", "Struggling to pay mortgage, 41.6%, NORTH METRO GA 300", "Trouble during payment process, 47.7%, PHILADELPHIA PA 191U", "Trouble during payment process, 45.6%, SOUTHERN MD MD 207", "Trouble during payment process, 46.0%, CHICAGO IL 606U", "Trouble during payment process, 46.5%, DULLES VA 201", "Trouble during payment process, 46.2%, CHARLOTTE NC 282U", "Struggling to pay mortgage, 50.8%, BOSTON MA 021U", "Trouble during payment process, 44.9%, SEATTLE WA 980", "Trouble during payment process, 54.3%, CLEVELAND OH 441U", "Trouble during payment process, 46.7%, PHOENIX AZ 852", "Trouble during payment process, 51.4%, DETROIT MI 481", "Trouble during payment process, 50.1%, DENVER CO 801", "Struggling to pay mortgage, 39.9%, MEMPHIS TN 381U", "Trouble during payment process, 50.1%, SOUTHERN CT 064", "Trouble during payment process, 56.0%, CHARLESTON SC 294", "Trouble during payment process, 44.9%, ST LOUIS MO 631U", "Trouble during payment process, 48.0%, NEW ORLEANS LA 700", "Trouble during payment process, 50.7%, LAS VEGAS NV 891U", "Trouble during payment process, 42.1%, GARY IN 463", "Trouble during payment process, 55.1%, PORTLAND OR 972U", "Trouble during payment process, 57.1%, MINNEAPOLIS MN 554U", "Trouble during payment process, 50.7%, MILWAUKEE WI 532U", "Trouble during payment process, 49.1%, MOBILE AL 365", "Trouble during payment process, 43.0%, OKLAHOMA CITY OK 731U", "Trouble during payment process, 51.5%, SALT LAKE CTY UT 840", "Trouble during payment process, 51.9%, WILMINGTON DE 197", "Trouble during payment process, 55.6%, LOUISVILLE KY 402U", "Struggling to pay mortgage, 44.0%, MEMPHIS TN 386", "Trouble during payment process, 47.2%, WASHINGTON DC 200U", "Trouble during payment process, 50.0%, PORTSMOUTH NH 038", "Trouble during payment process, 52.1%, DES MOINES IA 503U", "Trouble during payment process, 52.1%, ALBUQUERQUE NM 871U", "Trouble during payment process, 55.9%, NW ARKANSAS AR 727", "Struggling to pay mortgage, 54.2%, PROVIDENCE RI 028", "Trouble during payment process, 57.8%, KANSAS CITY KS 660", "Trouble during payment process, 49.3%, HONOLULU HI 967", "Trouble during payment process, 45.6%, PORTLAND ME 040", "Trouble during payment process, 62.1%, BOISE ID 836", "Trouble during payment process, 57.4%, OMAHA NE 681U", "Trouble during payment process, 63.4%, BUTTE MT 597", "Trouble during payment process, 59.0%, MARTINSBURG WV 254", "Trouble during payment process, 50.0%, BURLINGTON VT 054", "Struggling to pay mortgage, 38.2%, ANCHORAGE AK 995", "Trouble during payment process, 50.0%, CASPER WY 826", "Trouble during payment process, 66.7%, SIOUX FALLS SD 571U", "Trouble during payment process, 60.0%, BISMARCK ND 585" ], "type": "choropleth", "uid": "88626290-be63-40f9-a732-d3d16c29940b", "z": [ 3628, 2442, 1621, 1526, 1189, 1178, 870, 825, 803, 752, 664, 577, 555, 536, 456, 426, 423, 388, 357, 336, 316, 298, 274, 247, 245, 238, 227, 224, 142, 130, 129, 117, 116, 108, 108, 94, 94, 93, 83, 83, 75, 68, 66, 61, 41, 39, 38, 34, 28, 21, 15 ] } ], "layout": { "geo": { "lakecolor": "rgb(85,173,240)", "scope": "usa", "showlakes": true }, "title": { "text": "CFPB Total Mortgage Product Complaints by State in 2018" } } }, "text/html": [ "
" ], "text/vnd.plotly.v1+html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "choromap = go.Figure(data = [data],layout = layout)\n", "#plot(choromap,validate=False)\n", "iplot(choromap,show_link=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# BUBBLE CHART" ] }, { "cell_type": "code", "execution_count": 113, "metadata": {}, "outputs": [], "source": [ "mort_loc = df_mort.groupby(['loc']).agg({'Complaint ID': pd.Series.nunique})" ] }, { "cell_type": "code", "execution_count": 114, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Complaint ID
loc
ABILENE TX 7681
ABILENE TX 796U3
AKRON OH 44233
AKRON OH 443U18
ALAMOGORDO NM 8831
\n", "
" ], "text/plain": [ " Complaint ID\n", "loc \n", "ABILENE TX 768 1\n", "ABILENE TX 796U 3\n", "AKRON OH 442 33\n", "AKRON OH 443U 18\n", "ALAMOGORDO NM 883 1" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# dataframe with loc and mortgage complaints counts\n", "mort_loc.head()" ] }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [], "source": [ "# Sort values and rank\n", "mort_loc.sort_values(by='Complaint ID',ascending=False, inplace=True)\n", "mort_loc['Rank'] = mort_loc['Complaint ID'].rank(ascending=False)" ] }, { "cell_type": "code", "execution_count": 116, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
# of ComplaintsRank
loc
NORTH METRO GA 3004241.0
SOUTH FLORIDA FL 3302862.0
MIAMI FL 331U2803.0
OAKLAND CA 9452794.0
SOUTHERN MD MD 2072615.0
\n", "
" ], "text/plain": [ " # of Complaints Rank\n", "loc \n", "NORTH METRO GA 300 424 1.0\n", "SOUTH FLORIDA FL 330 286 2.0\n", "MIAMI FL 331U 280 3.0\n", "OAKLAND CA 945 279 4.0\n", "SOUTHERN MD MD 207 261 5.0" ] }, "execution_count": 116, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mort_loc.rename(columns={'Complaint ID': '# of Complaints'}, inplace=True)\n", "mort_loc.head()" ] }, { "cell_type": "code", "execution_count": 117, "metadata": {}, "outputs": [], "source": [ "# reset index so loc is a column\n", "mort_loc.reset_index(inplace=True)" ] }, { "cell_type": "code", "execution_count": 118, "metadata": {}, "outputs": [], "source": [ "# create the dataframe to calc % of complaints: Struggling to pay mortgage\n", "mort_trou = df_mort[df_mort['Issue'] == 'Struggling to pay mortgage'\n", " ].groupby(['loc']).agg({'Complaint ID': pd.Series.nunique})" ] }, { "cell_type": "code", "execution_count": 119, "metadata": {}, "outputs": [], "source": [ "# rename columns, sort values, reset index\n", "mort_trou.rename(columns={'Complaint ID': 'StrugToPay'}, inplace=True)\n", "mort_trou.sort_values(by='StrugToPay',ascending=False, inplace=True)\n", "mort_trou.reset_index(inplace=True)" ] }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [], "source": [ "# merge data frames \n", "new_df = pd.merge(mort_loc,mort_trou,how='left',on='loc')" ] }, { "cell_type": "code", "execution_count": 121, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
loc# of ComplaintsRankStrugToPay
0NORTH METRO GA 3004241.0194.0
1SOUTH FLORIDA FL 3302862.0100.0
2MIAMI FL 331U2803.084.0
3OAKLAND CA 9452794.0104.0
4SOUTHERN MD MD 2072615.0113.0
\n", "
" ], "text/plain": [ " loc # of Complaints Rank StrugToPay\n", "0 NORTH METRO GA 300 424 1.0 194.0\n", "1 SOUTH FLORIDA FL 330 286 2.0 100.0\n", "2 MIAMI FL 331U 280 3.0 84.0\n", "3 OAKLAND CA 945 279 4.0 104.0\n", "4 SOUTHERN MD MD 207 261 5.0 113.0" ] }, "execution_count": 121, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_df.head()" ] }, { "cell_type": "code", "execution_count": 122, "metadata": {}, "outputs": [], "source": [ "# create new column and format for chart\n", "new_df['StrugPay%'] = new_df['StrugToPay'] / new_df['# of Complaints'] * 100\n", "pd.options.display.float_format = '{:.1f}'.format" ] }, { "cell_type": "code", "execution_count": 123, "metadata": {}, "outputs": [], "source": [ "# change rank column to integers\n", "new_df.Rank = new_df.Rank.astype(int)" ] }, { "cell_type": "code", "execution_count": 124, "metadata": {}, "outputs": [], "source": [ "# only need top 15 for chart\n", "new_15 = new_df.iloc[:15,:].set_index('loc')" ] }, { "cell_type": "code", "execution_count": 125, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
# of ComplaintsRankStrugToPayStrugPay%
loc
NORTH METRO GA 3004241194.045.8
SOUTH FLORIDA FL 3302862100.035.0
MIAMI FL 331U280384.030.0
OAKLAND CA 9452794104.037.3
SOUTHERN MD MD 2072615113.043.3
NORTH TEXAS TX 750223664.028.7
SANTA ANA CA 9262227108.048.6
WEST PALM BCH FL 334205849.023.9
CHICAGO IL 606U196960.030.6
VAN NUYS CA 9131941084.043.3
MID-ISLAND NY 1171901189.046.8
HOUSTON TX 770U1851249.026.5
SOUTH JERSEY NJ 0801791374.041.3
INDUSTRY CA 9171771469.039.0
LOS ANGELES CA 900U1751572.041.1
\n", "
" ], "text/plain": [ " # of Complaints Rank StrugToPay StrugPay%\n", "loc \n", "NORTH METRO GA 300 424 1 194.0 45.8\n", "SOUTH FLORIDA FL 330 286 2 100.0 35.0\n", "MIAMI FL 331U 280 3 84.0 30.0\n", "OAKLAND CA 945 279 4 104.0 37.3\n", "SOUTHERN MD MD 207 261 5 113.0 43.3\n", "NORTH TEXAS TX 750 223 6 64.0 28.7\n", "SANTA ANA CA 926 222 7 108.0 48.6\n", "WEST PALM BCH FL 334 205 8 49.0 23.9\n", "CHICAGO IL 606U 196 9 60.0 30.6\n", "VAN NUYS CA 913 194 10 84.0 43.3\n", "MID-ISLAND NY 117 190 11 89.0 46.8\n", "HOUSTON TX 770U 185 12 49.0 26.5\n", "SOUTH JERSEY NJ 080 179 13 74.0 41.3\n", "INDUSTRY CA 917 177 14 69.0 39.0\n", "LOS ANGELES CA 900U 175 15 72.0 41.1" ] }, "execution_count": 125, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_15" ] }, { "cell_type": "code", "execution_count": 126, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Rank is by # of Total Mortgage product complaints. Y-axis is the % of those complaints which had issue: Struggling to pay mortgage\n" ] }, { "data": { "image/png": "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AGzdupU77riDXr16ERcXx759+4iKigqW37VrV3BYrs1mw+fzBZM7j8eD/RS21njkkUfo3bs3OcWHmbh+At+MXRt87lSGK2/95Bc8hz3YIssnlW2vasOqKd9wYGv2cds2WU1EN4siJyOXfT9mce5dPclYteO45T05HqKbH73YjFk10aBHfb744gsCgQADBgzgu+++O249+/btIz4+/qjj+/fv57777mPYsGEMGDAAAFU9cv3R7XYTWbYfp67rrF69moceeui47QhRFwwePJhp06bRq1cvCgsLad++PVA6BUDXde4qm5Zz6NAh1q9fHxzarCgKkydPZvjw4dxzzz3HrT9Y7qabGO4phrLPpE1R8f0pOS3WdWzqkSQ3xmymc5iTS/+0QFWhFuCA38e9jRpzL3DI7+eJ3btIdji4MPLId2u81cJBv49wkwMUFd/WrfwQGUFycjJpaWm43W7++c9/AqXfBYsXLw7OQQa48MIL2bp1KykpKbRu3ZoOHToQfZKFskaMGMGNN97IHXfcwYYNGzj33HNPWF4IIWqKan0nF8DapQuOQQMxCvJDHUqNZeTnYTu3F/a+xx5KKeq29PR0nn76aXw+HwCJiYlERkZiMplISUlh2rRpuMpGU7jdbqZNm8bw4cMBaN++PV9++WWwrjVr1tCpU6dTbrs4UIx6Bl9DHf/enuL8YjJW7Sx3XFEV/jayO1vmnvhubrNeCWxbvh1rmBWz/fjX+orzS8jafIBGnY5OTlVFpUHXBqxYsYIffvih3OIwf+Xz+Xj//fe5+uqryx0/fPgwt912G4888gg33HBD8Hj79u3ZWLaNyJo1a+jRowcAv//+O4mJiad0IUGI2iw5ORm3283777/P9ddfHzw+f/58ZsyYwVtvvcVbb73FuHHjjppeER8fz6hRo3j++edP2EZ8fDz3DBzEzMKC4L3aNg4H3xQWBMtsKCqkrSPs2BWU8esGE/bsJtdfOmKlntlMPYsZq1L+u+/qmFjePZhNwDBQ7HYyNm9m3LhxmEwm5s+fz6RJk4L9eumll44asrxz504aNWrE3Llzuffee1EUJXiB7K927NjB/fffj2EYWCwWrFZruYtrQghR01XrO7l/CL/zDrzffYdeUIhaNjdQnBqjuBjFZifinw/LfBtxTFdccQUZGRnccMMNhIWFYRgGY8aMISIigr59++Jyubj9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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# bubble chart\n", "Top15 = new_15\n", "#fig, ax = plt.subplots()\n", "ax = Top15.plot(x='Rank', y='StrugPay%', kind='scatter',\n", " c=['#e41a1c','#377eb8','#e41a1c','#4daf4a','#4daf4a','#377eb8','#4daf4a','#e41a1c',\n", " '#4daf4a','#e41a1c','#4daf4a','#4daf4a','#e41a1c','#dede00','#ff7f00'],\n", " xticks=range(1,16), s=(5*Top15['# of Complaints']/100)**3, alpha=.75, figsize=[16,6]);\n", "for i, txt in enumerate(Top15.index):\n", " ax.annotate(txt, [Top15['Rank'][i], Top15['StrugPay%'][i]], ha='center')\n", "plt.savefig('bubble.jpg',bbox_inches=\"tight\")\n", "print(\"Rank is by # of Total Mortgage product complaints. Y-axis is the % of those complaints which had issue: Struggling to pay mortgage\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.2" } }, "nbformat": 4, "nbformat_minor": 2 }