ΠΠ½ΡΠΎΠ½, ΡΠ°Π΄ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠ΅Π±Ρ)
ΠΠ° ΡΠ²ΡΠ·ΠΈ ΡΠ²ΠΎΠΉ ΡΠΈΠΌΠ»ΠΈΠ΄ ΠΠ»Π΅ΠΊΡΠ°Π½Π΄Ρ ΠΡΡΡΠ΅Π½ΠΊΠΎ, Π΄ΡΠΌΠ°Ρ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΡ Π·Π½Π°Π΅ΡΡ, Π½ΠΎ Ρ ΠΏΠΎΠ²ΡΠΎΡΡ.
ΠΡΠ΅Π΄Π»Π°Π³Π°Ρ ΠΎΠ±ΡΠ°ΡΡΡΡ Π½Π° "ΡΡ", Π΅ΡΠ»ΠΈ ΡΡΠΎ Π΄Π»Ρ ΡΠ΅Π±Ρ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ)
Π ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΎΡΡΠ°Π²Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³ΡΡ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΡΡΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» ΠΈΠ»ΠΈ ΡΠΊΠ°ΠΆΡ, ΡΡΠΎ Π²ΡΠ΅ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π²Π΅ΡΠ½ΠΎ.
ΠΠ°Π²Π°ΠΉ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌΡΡ ΠΎΠ± ΡΡΠ»ΠΎΠ²Π½ΡΡ
ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡΡ
, ΡΡΠΎΠ±Ρ Π½Π°ΡΠ΅ ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π΅Π΅:
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π±ΡΠ΄ΡΡ Π² Π·Π΅Π»Π΅Π½ΠΎΠΉ βοΈ, ΠΎΡΠ°Π½ΠΆΠ΅Π²ΠΎΠΉ β οΈ ΠΈΠ»ΠΈ ΠΊΡΠ°ΡΠ½ΠΎΠΉ β ΡΠ°ΠΌΠΊΠ°Ρ :
ΠΠ΅Π»Π΅Π½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ ΠΎΠ±ΡΠ°Π·ΡΠΎΠ²ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ. ΠΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ.
ΠΠ΅Π»ΡΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ ΠΎΡΠΌΠ΅ΡΠ΅Π½ΠΎ ΡΠΎ, ΡΡΠΎ ΡΡ ΠΌΠΎΠΆΠ΅ΡΡ ΡΠ»ΡΡΡΠΈΡΡ ΠΈΠ»ΠΈ Π΄ΠΎΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΠΎΠΆΠ΅ΡΡ ΡΡΠ΅ΡΡΡ ΡΡΠΎ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°Π±ΠΎΡ ΠΈΠ»ΠΈ Π΄ΠΎΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ΅ΠΉΡΠ°Ρ, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ.
ΠΡΠ°ΡΠ½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ ΠΌΠΎΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΡΠ°Π±ΠΎΡΠ°ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ΅ΠΊΡ Π±ΡΠ» ΠΏΡΠΈΠ½ΡΡ. Π£Π²Π΅ΡΠ΅Π½, ΡΡΠΎ Ρ ΡΠ΅Π±Ρ Π²ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ. ΠΡΠ΄Ρ ΠΆΠ΄Π°ΡΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ Π½Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΡΠ΅Π²ΡΡ.
Π‘ΡΠ°ΡΠ°ΠΉΡΡ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π½Π° ΠΌΠΎΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΈ Π½Π΅ ΡΠ΄Π°Π»ΡΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΡΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ Π±ΡΡΡΡΠ΅Π΅)
ΠΠΎΠ³Π½Π°Π»ΠΈ!
Π’Π΅Π»Π΅ΠΊΠΎΠΌ β Π·Π°Π΄Π°ΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°ΒΆ
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠ²ΡΠ·ΠΈ Β«ΠΠΈΠ΅Π΄ΠΈΠ½ΠΎΠ³ΠΎΡΠ°Π·ΡΡΠ²Π°.ΠΊΠΎΠΌΒ» Ρ ΠΎΡΠ΅Ρ Π½Π°ΡΡΠΈΡΡΡΡ ΠΏΡΠΎΠ³Π½ΠΎΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΡΠΎΠΊ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ². ΠΡΠ»ΠΈ Π²ΡΡΡΠ½ΠΈΡΡΡ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅Ρ ΡΠΉΡΠΈ, Π΅ΠΌΡ Π±ΡΠ΄ΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ ΠΏΡΠΎΠΌΠΎΠΊΠΎΠ΄Ρ ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ. ΠΠΎΠΌΠ°Π½Π΄Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΡΠΎΠ±ΡΠ°Π»Π° ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°Ρ , ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΈΡ ΡΠ°ΡΠΈΡΠ°Ρ ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠ°Ρ .
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ»ΡΠ³
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΈΠΏΠ° ΡΡΠ»ΡΠ³:ΒΆ
- Π‘ΡΠ°ΡΠΈΠΎΠ½Π°ΡΠ½ΡΡ ΡΠ΅Π»Π΅ΡΠΎΠ½Π½ΡΡ ΡΠ²ΡΠ·Ρ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π»Π΅ΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ° ΠΊ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ Π»ΠΈΠ½ΠΈΡΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ.
- ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ. ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄Π²ΡΡ ΡΠΈΠΏΠΎΠ²: ΡΠ΅ΡΠ΅Π· ΡΠ΅Π»Π΅ΡΠΎΠ½Π½ΡΡ Π»ΠΈΠ½ΠΈΡ (DSL*,* ΠΎΡ Π°Π½Π³Π». digital subscriber line, Β«ΡΠΈΡΡΠΎΠ²Π°Ρ Π°Π±ΠΎΠ½Π΅Π½ΡΡΠΊΠ°Ρ Π»ΠΈΠ½ΠΈΡΒ») ΠΈΠ»ΠΈ ΠΎΠΏΡΠΎΠ²ΠΎΠ»ΠΎΠΊΠΎΠ½Π½ΡΠΉ ΠΊΠ°Π±Π΅Π»Ρ (Fiber optic).
Π’Π°ΠΊΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ»ΡΠ³ΠΈ:ΒΆ
- ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ-Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ: Π°Π½ΡΠΈΠ²ΠΈΡΡΡ (DeviceProtection) ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΡΠ°ΠΉΡΠΎΠ² (OnlineSecurity);
- ΠΡΠ΄Π΅Π»Π΅Π½Π½Π°Ρ Π»ΠΈΠ½ΠΈΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ (TechSupport);
- ΠΠ±Π»Π°ΡΠ½ΠΎΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ (OnlineBackup);
- Π‘ΡΡΠΈΠΌΠΈΠ½Π³ΠΎΠ²ΠΎΠ΅ ΡΠ΅Π»Π΅Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅ (StreamingTV) ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΡΠΈΠ»ΡΠΌΠΎΠ² (StreamingMovies).
ΠΠ° ΡΡΠ»ΡΠ³ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΠΏΠ»Π°ΡΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ΅ΡΡΡ ΠΈΠ»ΠΈ Π·Π°ΠΊΠ»ΡΡΠΈΡΡ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ Π½Π° 1β2 Π³ΠΎΠ΄Π°. ΠΠΎΡΡΡΠΏΠ½Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠ°ΡΡΡΡΠ° ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΠ°.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΠ°Π½Π½ΡΠ΅ ΡΠΎΡΡΠΎΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ², ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΈΠ· ΡΠ°Π·Π½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ²:ΒΆ
contract_new.csvβ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠ΅;personal_new.csvβ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°;internet_new.csvβ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-ΡΡΠ»ΡΠ³Π°Ρ ;phone_new.csvβ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΡΠ»ΡΠ³Π°Ρ ΡΠ΅Π»Π΅ΡΠΎΠ½ΠΈΠΈ.
ΠΠΎ Π²ΡΠ΅Ρ
ΡΠ°ΠΉΠ»Π°Ρ
ΡΡΠΎΠ»Π±Π΅Ρ customerID ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ΄ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠ°Ρ Π°ΠΊΡΡΠ°Π»ΡΠ½Π° Π½Π° 1 ΡΠ΅Π²ΡΠ°Π»Ρ 2020.
Π₯ΠΎΡΠΎΡΠ΅Π΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅!
ΠΠ°Π³ΡΡΠ·ΠΊΠ° Π΄Π°Π½Π½ΡΡ ΒΆ
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import phik
import warnings
def download(path):
try:
df = pd.read_csv('c:/users/norfolk/documents/python' + path, index_col=['customerID'])
except:
df = pd.read_csv(path)
display(df.head(5))
print('\n')
print(df.info())
return df
df_contract = download('/datasets/contract_new.csv')
| customerID | BeginDate | EndDate | Type | PaperlessBilling | PaymentMethod | MonthlyCharges | TotalCharges | |
|---|---|---|---|---|---|---|---|---|
| 0 | 7590-VHVEG | 2020-01-01 | No | Month-to-month | Yes | Electronic check | 29.85 | 31.04 |
| 1 | 5575-GNVDE | 2017-04-01 | No | One year | No | Mailed check | 56.95 | 2071.84 |
| 2 | 3668-QPYBK | 2019-10-01 | No | Month-to-month | Yes | Mailed check | 53.85 | 226.17 |
| 3 | 7795-CFOCW | 2016-05-01 | No | One year | No | Bank transfer (automatic) | 42.30 | 1960.6 |
| 4 | 9237-HQITU | 2019-09-01 | No | Month-to-month | Yes | Electronic check | 70.70 | 353.5 |
<class 'pandas.core.frame.DataFrame'> RangeIndex: 7043 entries, 0 to 7042 Data columns (total 8 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 customerID 7043 non-null object 1 BeginDate 7043 non-null object 2 EndDate 7043 non-null object 3 Type 7043 non-null object 4 PaperlessBilling 7043 non-null object 5 PaymentMethod 7043 non-null object 6 MonthlyCharges 7043 non-null float64 7 TotalCharges 7043 non-null object dtypes: float64(1), object(7) memory usage: 440.3+ KB None
df_personal = download('/datasets/personal_new.csv')
| customerID | gender | SeniorCitizen | Partner | Dependents | |
|---|---|---|---|---|---|
| 0 | 7590-VHVEG | Female | 0 | Yes | No |
| 1 | 5575-GNVDE | Male | 0 | No | No |
| 2 | 3668-QPYBK | Male | 0 | No | No |
| 3 | 7795-CFOCW | Male | 0 | No | No |
| 4 | 9237-HQITU | Female | 0 | No | No |
<class 'pandas.core.frame.DataFrame'> RangeIndex: 7043 entries, 0 to 7042 Data columns (total 5 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 customerID 7043 non-null object 1 gender 7043 non-null object 2 SeniorCitizen 7043 non-null int64 3 Partner 7043 non-null object 4 Dependents 7043 non-null object dtypes: int64(1), object(4) memory usage: 275.2+ KB None
df_internet = download('/datasets/internet_new.csv')
| customerID | InternetService | OnlineSecurity | OnlineBackup | DeviceProtection | TechSupport | StreamingTV | StreamingMovies | |
|---|---|---|---|---|---|---|---|---|
| 0 | 7590-VHVEG | DSL | No | Yes | No | No | No | No |
| 1 | 5575-GNVDE | DSL | Yes | No | Yes | No | No | No |
| 2 | 3668-QPYBK | DSL | Yes | Yes | No | No | No | No |
| 3 | 7795-CFOCW | DSL | Yes | No | Yes | Yes | No | No |
| 4 | 9237-HQITU | Fiber optic | No | No | No | No | No | No |
<class 'pandas.core.frame.DataFrame'> RangeIndex: 5517 entries, 0 to 5516 Data columns (total 8 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 customerID 5517 non-null object 1 InternetService 5517 non-null object 2 OnlineSecurity 5517 non-null object 3 OnlineBackup 5517 non-null object 4 DeviceProtection 5517 non-null object 5 TechSupport 5517 non-null object 6 StreamingTV 5517 non-null object 7 StreamingMovies 5517 non-null object dtypes: object(8) memory usage: 344.9+ KB None
df_phone = download('/datasets/phone_new.csv')
| customerID | MultipleLines | |
|---|---|---|
| 0 | 5575-GNVDE | No |
| 1 | 3668-QPYBK | No |
| 2 | 9237-HQITU | No |
| 3 | 9305-CDSKC | Yes |
| 4 | 1452-KIOVK | Yes |
<class 'pandas.core.frame.DataFrame'> RangeIndex: 6361 entries, 0 to 6360 Data columns (total 2 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 customerID 6361 non-null object 1 MultipleLines 6361 non-null object dtypes: object(2) memory usage: 99.5+ KB None
ΠΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π±Π°Π·Π΅ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΡΡΡΠ° ΠΈ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ·ΡΡΠ΅Π½Ρ, ΠΎΡΠ»ΠΈΡΠ½ΠΎ!)
ΠΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈΒΆ
def ncol(df):
df = df.rename(columns = {'customerID':'CustomerId'})
df.columns = df.columns.str.replace(r"([A-Z])", r" \1").str.lower().str.replace(' ', '_').str[1:]
print(list(df.columns),'\n')
return df
ΠΠ΄ΠΎΡΠΎΠ²ΠΎ, ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡ ΡΠ΅Π³ΡΠ»ΡΡΠΊΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΡΡ ΡΡΠΊΠ°ΠΌΠΈ)
warnings.filterwarnings('ignore')
df_personal = df_personal.rename(columns = {'gender':'Gender'})
df_personal = ncol(df_personal)
df_contract = ncol(df_contract)
df_internet = ncol(df_internet)
df_phone = ncol(df_phone)
['gender', 'senior_citizen', 'partner', 'dependents'] ['begin_date', 'end_date', 'type', 'paperless_billing', 'payment_method', 'monthly_charges', 'total_charges'] ['internet_service', 'online_security', 'online_backup', 'device_protection', 'tech_support', 'streaming_t_v', 'streaming_movies'] ['multiple_lines']
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΈΠ·Π½Π°ΠΊΠ°Ρ
not_categorical = ['monthly_charges','total_charges','begin_date', 'end_date']
def cat_1(df):
for i in df.columns:
if i not in not_categorical:
print(df[i].describe(),'\n')
print('ΠΡΠΎΠΏΡΡΠΊΠΈ',df[i].isna().sum(),'\n')
cat_1(df_personal)
print('\n*****************')
cat_1(df_contract)
print('\n*****************')
cat_1(df_internet)
print('\n*****************')
cat_1(df_phone)
count 7043 unique 2 top Male freq 3555 Name: gender, dtype: object ΠΡΠΎΠΏΡΡΠΊΠΈ 0 count 7043.000000 mean 0.162147 std 0.368612 min 0.000000 25% 0.000000 50% 0.000000 75% 0.000000 max 1.000000 Name: senior_citizen, dtype: float64 ΠΡΠΎΠΏΡΡΠΊΠΈ 0 count 7043 unique 2 top No freq 3641 Name: partner, dtype: object ΠΡΠΎΠΏΡΡΠΊΠΈ 0 count 7043 unique 2 top No freq 4933 Name: dependents, dtype: object ΠΡΠΎΠΏΡΡΠΊΠΈ 0 ***************** count 7043 unique 3 top Month-to-month freq 3875 Name: type, dtype: object ΠΡΠΎΠΏΡΡΠΊΠΈ 0 count 7043 unique 2 top Yes freq 4171 Name: paperless_billing, dtype: object ΠΡΠΎΠΏΡΡΠΊΠΈ 0 count 7043 unique 4 top Electronic check freq 2365 Name: payment_method, dtype: object ΠΡΠΎΠΏΡΡΠΊΠΈ 0 ***************** count 5517 unique 2 top Fiber optic freq 3096 Name: internet_service, dtype: object ΠΡΠΎΠΏΡΡΠΊΠΈ 0 count 5517 unique 2 top No freq 3498 Name: online_security, dtype: object ΠΡΠΎΠΏΡΡΠΊΠΈ 0 count 5517 unique 2 top No freq 3088 Name: online_backup, dtype: object ΠΡΠΎΠΏΡΡΠΊΠΈ 0 count 5517 unique 2 top No freq 3095 Name: device_protection, dtype: object ΠΡΠΎΠΏΡΡΠΊΠΈ 0 count 5517 unique 2 top No freq 3473 Name: tech_support, dtype: object ΠΡΠΎΠΏΡΡΠΊΠΈ 0 count 5517 unique 2 top No freq 2810 Name: streaming_t_v, dtype: object ΠΡΠΎΠΏΡΡΠΊΠΈ 0 count 5517 unique 2 top No freq 2785 Name: streaming_movies, dtype: object ΠΡΠΎΠΏΡΡΠΊΠΈ 0 ***************** count 6361 unique 2 top No freq 3390 Name: multiple_lines, dtype: object ΠΡΠΎΠΏΡΡΠΊΠΈ 0
ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΡΠΈΠΏΡ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΠΈΠ΅ΒΆ
# ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΡΠΈΡ Ρ.ΠΊ. ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠ°Π»ΡΠ½ΡΡ
Π΄Π°Π½Π½ΡΡ
ΠΌΠ½ΠΎΠ³ΠΎ, Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Π²ΡΡΡΠ½ΡΡ
def type_new(df):
for i in df.columns:
if i not in not_categorical:
df[i] = df[i].astype('category')
return df
df_contract = type_new(df_contract)
df_contract['total_charges'] = df_contract['total_charges'].replace(' ','0')
df_contract['total_charges'] = df_contract['total_charges'].astype('float')
df_contract['monthly_charges'] = df_contract['monthly_charges'].astype('float')
df_contract['begin_date']=pd.to_datetime(df_contract['begin_date'], format='%Y-%m-%d')
df_contract['end_date'] = df_contract['end_date'].replace('No',np.nan)
df_contract['end_date']=pd.to_datetime(df_contract['end_date'], format='%Y-%m-%d')
df_contract['end_date'] = df_contract['end_date'].fillna('2020-02-01')
df_contract.info()
<class 'pandas.core.frame.DataFrame'> Index: 7043 entries, 7590-VHVEG to 3186-AJIEK Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 begin_date 7043 non-null datetime64[ns] 1 end_date 7043 non-null datetime64[ns] 2 type 7043 non-null category 3 paperless_billing 7043 non-null category 4 payment_method 7043 non-null category 5 monthly_charges 7043 non-null float64 6 total_charges 7043 non-null float64 dtypes: category(3), datetime64[ns](2), float64(2) memory usage: 296.2+ KB
Π₯ΠΎΡΠΎΡΠΎ!
df_personal = type_new(df_personal)
df_personal.info()
<class 'pandas.core.frame.DataFrame'> Index: 7043 entries, 7590-VHVEG to 3186-AJIEK Data columns (total 4 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 gender 7043 non-null category 1 senior_citizen 7043 non-null category 2 partner 7043 non-null category 3 dependents 7043 non-null category dtypes: category(4) memory usage: 83.0+ KB
df_internet = type_new(df_internet)
df_internet.info()
<class 'pandas.core.frame.DataFrame'> Index: 5517 entries, 7590-VHVEG to 3186-AJIEK Data columns (total 7 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 internet_service 5517 non-null category 1 online_security 5517 non-null category 2 online_backup 5517 non-null category 3 device_protection 5517 non-null category 4 tech_support 5517 non-null category 5 streaming_t_v 5517 non-null category 6 streaming_movies 5517 non-null category dtypes: category(7) memory usage: 81.7+ KB
df_phone = type_new(df_phone)
df_phone.info()
<class 'pandas.core.frame.DataFrame'> Index: 6361 entries, 5575-GNVDE to 3186-AJIEK Data columns (total 1 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 multiple_lines 6361 non-null category dtypes: category(1) memory usage: 56.0+ KB
ΠΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΡΠΌ Π½Π°ΡΠΈ Π΄Π°ΡΠ°ΡΠ΅ΡΡΒΆ
# ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠ°ΠΊ ΠΈ ΡΠ°Π½ΡΡΠ΅ Π΄Π»Ρ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΡΠΎΡΡΠΈΠΌ Π½Π΅ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅
def plotting(df):
for i in df.columns:
if i not in not_categorical:
plt.title('Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ '+i, color ='brown')
plt.xlabel(i)
plt.ylabel('ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²')
plt.xticks(rotation = 45)
df[i].hist(figsize=(5,2), grid = True);
plt.show()
plotting(df_personal)
plotting(df_contract)
plt.title('Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠ°ΡΡ
ΠΎΠ΄Π°ΠΌ Π² ΠΌΠ΅ΡΡΡ ', color ='brown')
plt.xlabel('Π Π°ΡΡ
ΠΎΠ΄')
plt.ylabel('ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ')
df_contract['monthly_charges'].hist(bins = 50, figsize=(5,2), grid = True);
plt.show()
plt.title('Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡ
ΠΎΠ΄ΠΎΠ² Π·Π° Π²ΡΠ΅ Π²ΡΠ΅ΠΌΡ ', color ='brown')
plt.xlabel('Π Π°ΡΡ
ΠΎΠ΄')
plt.ylabel('ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ')
df_contract['total_charges'].hist(bins = 50, figsize=(5,2), grid = True);
plotting(df_internet)
plotting(df_phone)
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ Π΄Π°ΡΠ°ΡΠ΅ΡΠ° Ρ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠ°ΠΌΠΈ Π·Π΄Π΅ΡΡ Π΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
1) ΠΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Ρ ΠΏΠΎΠΌΠ΅ΡΡΡΠ½ΠΎΠΉ ΠΎΠΏΠ»Π°ΡΠΎΠΉ.
2) ΠΠΌΠ΅Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅Ρ Π² ΡΡΠΎΡΠΎΠ½Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Π±Π΅Π· Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠ΅Ρ
.ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ
3) Π’Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π²Π΅Ρ Π΅ΡΡΡ ΠΈ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Ρ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π·Π°ΡΠΈΡΠΎΠΉ ΠΏΡΠΎΡΠΈΠ² ΡΠ΅Ρ
Ρ ΠΊΠΎΠ³ΠΎ ΠΎΠ½Π° Π΅ΡΡΡ
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΡ)
sns.heatmap(df_contract.phik_matrix(), annot =True);
interval columns not set, guessing: ['monthly_charges', 'total_charges']
ΠΠ»Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π° ΠΎΡΡΠ°Π»ΡΡ ΠΎΠ΄ΠΈΠ½ Π²ΠΎΠΏΡΠΎΡ. ΠΠ½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΠΏΠΎΠ΄ ΠΏΠ»Π°Π½ΠΎΠΌ ΡΠ°Π±ΠΎΡΡ.
ΠΠ»Π°Π½ ΡΠ°Π±ΠΎΡΡΒΆ
- Π¨Π°Π³ 1: ΠΠ·ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
- ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ Π΄Π°ΡΠ΅ΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
- ΠΡΠΈΠ²ΠΎΠ΄ΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΈ ΡΠΈΠΏΡ ΠΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ.
- Π‘ΡΡΠΎΠΈΠΌ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²Π΅Π»ΠΈΡΠ½, Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΠ΅ΡΠ²ΡΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ.
- Π¨Π°Π³ 2: ΠΡΠ΅Π΄ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°
- ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ, Π²ΡΠ±ΡΠΎΡΡ, ΡΠ²ΡΠ·ΠΈ ΠΈ Π·Π°ΠΊΠΎΠ½ΠΎΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ (Π΅ΡΠ»ΠΈ ΠΈΠΌΠ΅ΡΡΡΡ).
- ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΏΡΠΎΠΏΡΡΠ΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
- Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π΅Π΄ΠΈΠ½ΡΠΉ Π΄Π°ΡΠ°ΡΠ΅Ρ
- Π¨Π°Π³ 3: ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½ΡΡ
Π΄Π»Ρ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ
- ΠΡΠ΄Π΅Π»ΡΠ΅ΠΌ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΏΡΠΈΠ·Π½Π°ΠΊ
- ΠΡΠ΄Π΅Π»ΡΠ΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
- Π£Π΄Π°Π»ΡΠ΅ΠΌ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Π½Π΅ Π½Π΅ΡΡΡΠΈΠ΅ ΡΠ΅Π½Π½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ
- Π Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌ Π½Π° ΠΎΠ±ΡΡΠ°ΡΡΡΡ ΠΈ ΡΡΠ΅Π½Π΅ΡΠΎΠ²ΠΎΡΠ½ΡΡ Π²ΡΠ±ΠΎΡΠΊΠΈ
- ΠΡΠΎΠ²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠ²
- Π¨Π°Π³ 4: ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ
- ΠΠΎΠ΄Π΅Π»Ρ "ΠΠ΅ΡΠ΅Π²ΠΎ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ"
- ΠΠΎΠ΄Π΅Π»Ρ "ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ Π»Π΅Ρ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ"
- ΠΠΎΠ΄Π΅Π»Ρ CatBoost
- ΠΠΎΠ΄Π΅Π»Ρ LGBM
- Π¨Π°Π³ 5: ΠΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΡΡΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ
- ΠΠ½Π°Π»ΠΈΠ· ΠΌΠ΅ΡΡΠΊΠΈ AUC-ROC(Π»ΡΡΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ)
- ΠΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π²Π°ΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠ²
- Π¨Π°Π³ 6: ΠΡΠ²ΠΎΠ΄Ρ
ΠΠ»Π°Π½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Ρ!
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ, ΡΡΠΎ Π±ΡΠ» Π½Π° Π²ΡΡΡΠ΅ΡΠ΅) Partner ΡΡΠΎ ΠΏΡΠΈΠ·Π½Π°ΠΊ ΠΊΠΎΡΠΎΡΡΠΉ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎΠ± ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΠΈΠ»ΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΏΠ°ΡΡΠ½Π΅ΡΠ° (ΡΡΠΎ ΠΏΠΎΠ΄ ΡΡΠΈΠΌ ΠΈΠΌΠ΅Π΅ΡΡΡ Π²Π²ΠΈΠ΄Ρ, ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠΆΠΈΠ²Π°Π½ΠΈΠ΅, Π±ΡΠ°ΠΊ ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊ Π½Π΅ ΡΡΠΎΡΠ½ΠΈΠ»)
ΠΡΠΈΠ½ΠΈΠΌΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΠΈ, Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ) ΠΠΎΠΆΠ΅ΡΡ ΠΏΡΠΈΡΡΡΠΏΠ°ΡΡ ΠΊΠΎ Π²ΡΠΎΡΠΎΠΌΡ ΡΡΠ°ΠΏΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°!