πŸ“Š ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠΉ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Matplotlib ΠΈ Seaborn с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ

ΠœΡ‹ ΡƒΠΆΠ΅ рассматривали графичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Python. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ Ρ‚Π΅ΠΌΡƒ, Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Matplotlib ΠΈ Seaborn.

ВСкст публикуСтся Π² ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅, Π°Π²Ρ‚ΠΎΡ€ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ – Rashida Nasrin Sucky.

***

Π’ Python'Π΅ Π΅ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Π±ΠΎΠ³Π°Ρ‚Ρ‹Π΅ графичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π― ΡƒΠΆΠ΅ писала ΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Pandas ΠΈ Matplotlib. Π’ основном это Π±Ρ‹Π»ΠΈ основы, ΠΈ ΠΌΡ‹ слСгка ΠΏΡ€ΠΈΡ‚Ρ€ΠΎΠ½ΡƒΠ»ΠΈΡΡŒ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ. БСйчас Π²Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΏΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π― Ρ€Π΅ΡˆΠΈΠ»Π° Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ² Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ – всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΠ²Π΅ΠΆΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹, поТалуйста, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Β«Π’Π°ΡˆΠ° повсСднСвная ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° ΠΏΠΎ MatplotlibΒ».

Напоминаю: Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ для обучСния, Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ выполняйтС всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ вслСд Π·Π° ΠΌΠ½ΠΎΠΉ. Π­Ρ‚ΠΎ СдинствСнный способ Ρ‡Π΅ΠΌΡƒ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ. Π’Π°ΠΊΠΆΠ΅ Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π½Π΅ΠΌ.

Π’ΠΎΡ‚ ссылка Π½Π° Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅. ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½Ρ‹Ρ… Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Π±ΡƒΠ΄Π΅ΠΌ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ ΠΊ Π±ΠΎΠ»Π΅Π΅ ясным, Π½ΠΎ ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТным Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns
import warnings
warnings.filterwarnings(action="once")
df = pd.read_csv("nhanes_2015_2016.csv")

Π­Ρ‚ΠΎΡ‚ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… довольно Π²Π΅Π»ΠΈΠΊ, ΠΈ я Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. Но ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ список столбцов этого Π½Π°Π±ΠΎΡ€Π°:

df.columns

Π’Ρ‹Π²ΠΎΠ΄:

Index(['SEQN', 'ALQ101', 'ALQ110', 'ALQ130', 'SMQ020', 'RIAGENDR', 'RIDAGEYR',
       'RIDRETH1', 'DMDCITZN', 'DMDEDUC2', 'DMDMARTL', 'DMDHHSIZ', 'WTINT2YR',
       'SDMVPSU', 'SDMVSTRA', 'INDFMPIR', 'BPXSY1', 'BPXDI1', 'BPXSY2',
       'BPXDI2', 'BMXWT', 'BMXHT', 'BMXBMI', 'BMXLEG', 'BMXARML', 'BMXARMC',
       'BMXWAIST', 'HIQ210'], dtype='object')

Π’Ρ‹ навСрняка Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ названия столбцов ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ нСпонятныС! Π”Π°, Ρ‚Π°ΠΊ ΠΈ Π΅ΡΡ‚ΡŒ, Π½ΠΎ Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, я всС объясню ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ использования Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Π²Ρ‹ всС ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅.

Π’ Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π΅ΡΡ‚ΡŒ нСсколько качСствСнных (categorical) столбцов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ – Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ ΠΏΠΎΠ» (RIAGENDR), сСмСйноС ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (DMDMARTL) ΠΈ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ образования (DMDEDUC2). Π― Ρ…ΠΎΡ‡Ρƒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… значСния Π² осмыслСнныС вмСсто ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ чисСл.

df["RIAGENDRx"] = df.RIAGENDR.replace({1: "Male", 2: "Female"})
df["DMDEDUC2x"] = df.DMDEDUC2.replace({1: "<9", 2: "9-11", 3: "HS/GED", 4: "Some college/AA", 5: "College", 7: "Refused", 9: "Don't know"})
df["DMDMARTLx"] = df.DMDMARTL.replace({1: "Married", 2: "Widowed", 3: "Divorced", 4: "Separated", 5: "Never married", 6: "Living w/partner", 77: "Refused"})

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ рассСяния

ВСроятно, самыми простыми Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ, Π±Ρ‹Π»ΠΈ линСйная Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΈ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° рассСяния. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ рассСяния, Π½ΠΎ с нСбольшой ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ.

Π’ этом дСмонстрационном ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ я Π²Ρ‹Π²Π΅Π΄Ρƒ дистоличСскоС Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΡ€ΠΎΠ²ΠΈ (BPXDI1) ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ систоличСскому (BPXSY1). Π’ качСствС нСбольшой ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ я Π±ΡƒΠ΄Ρƒ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ†Π²Π΅Ρ‚Π°ΠΌΠΈ Π² зависимости ΠΎΡ‚ сСмСйного полоТСния. Π‘ΡƒΠ΄Π΅Ρ‚ интСрСсно ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π»ΠΈ сСмСйноС ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ влияниС Π½Π° Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΡ€ΠΎΠ²ΠΈ.

Для Π½Π°Ρ‡Π°Π»Π° Π½Π°ΠΉΠ΄Π΅ΠΌ, сколько ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² сСмСйного полоТСния встрСчаСтся Π² Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

category = df["DMDMARTLx"].unique()
category

Π’Ρ‹Π²ΠΎΠ΄:

array(['Married', 'Divorced', 'Living w/partner', 'Separated',
       'Never married', nan, 'Widowed', 'Refused'], dtype=object)

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ Ρ†Π²Π΅Ρ‚ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ.

colors = [plt.cm.tab10(i/float(len(category)-1)) for i in range(len(category))]
colors

Π’Ρ‹Π²ΠΎΠ΄:

[(0.12156862745098039, 0.4666666666666667, 0.7058823529411765, 1.0),
 (1.0, 0.4980392156862745, 0.054901960784313725, 1.0),
 (0.17254901960784313, 0.6274509803921569, 0.17254901960784313, 1.0),
 (0.5803921568627451, 0.403921568627451, 0.7411764705882353, 1.0),
 (0.5490196078431373, 0.33725490196078434, 0.29411764705882354, 1.0),
 (0.4980392156862745, 0.4980392156862745, 0.4980392156862745, 1.0),
 (0.7372549019607844, 0.7411764705882353, 0.13333333333333333, 1.0),
 (0.09019607843137255, 0.7450980392156863, 0.8117647058823529, 1.0)]

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ явно Π·Π°Π΄Π°Ρ‚ΡŒ список ΠΈΠΌΠ΅Π½ своих Π»ΡŽΠ±ΠΈΠΌΡ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ². Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΡˆΡƒ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. ΠœΡ‹ ΠΏΡ€ΠΎΠΉΠ΄Π΅ΠΌ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΈ нарисуСм ΠΈΡ… ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ.

plt.figure(figsize=(16, 10), dpi=80, facecolor="w", edgecolor="k")
for i, cat in enumerate(category):
    plt.scatter("BPXDI1", "BPXSY1",
               data=df.loc[df.DMDMARTLx == cat, :],
                          s = 20, c=colors[i], label=str(cat))
    
plt.gca().set(xlabel='BPXDI1', ylabel='BPXSY1')
    
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.title("Marital status vs Systolic blood pressure", fontsize=18)
plt.legend(fontsize=12)
plt.show()

Π’ этот Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Ρ‚ΠΎΡ‡Π΅ΠΊ. Для этого я Π²ΠΊΠ»ΡŽΡ‡Ρƒ Π² Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… индСкс массы Ρ‚Π΅Π»Π° (BMXBMI). Π― создам ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ столбСц ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ 'dot_size', Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ индСкс массы Ρ‚Π΅Π»Π°, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Π½Π° 10.

df["dot_size"] = df.BMXBMI*10

Π’Π΅ΠΏΠ΅Ρ€ΡŒ сдСлаСм Π½Π°ΡˆΡƒ Π½ΠΎΠ²ΡƒΡŽ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ:

fig = plt.figure(figsize=(16, 10), dpi= 80, facecolor='w', edgecolor='k')    
for i, cat in enumerate(category):
    plt.scatter("BPXDI1", "BPXSY1", data=df.loc[df.DMDMARTLx == cat, :], s='dot_size', c=colors[i], label=str(cat), edgecolors='black')
plt.gca().set(xlabel='Diastolic Blood Pressure ', ylabel='Systolic blood Pressure')
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.legend(fontsize=12)    
plt.show()

Выглядит слишком скомканно, Π½Π΅ ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ? Из Ρ‚Π°ΠΊΠΎΠΉ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ. Π’Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ нСсколько Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² Π½Π°ΡˆΠΈΡ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°Ρ….

Один ΠΈΠ· ΠΏΡƒΡ‚Π΅ΠΉ ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ – это Π²Π·ΡΡ‚ΡŒ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΡƒΡŽ Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ ΠΈΠ· нашСго Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ наш Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… слишком Π²Π΅Π»ΠΈΠΊ, Ссли ΠΌΡ‹ возьмСм Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ ΠΈΠ· 500 элСмСнтов, Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ этого Ρ‚ΠΈΠΏΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ я Π½Π°Ρ€ΠΈΡΡƒΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 500 элСмСнтов ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…, прСдполагая, Ρ‡Ρ‚ΠΎ вСсь Π½Π°Π±ΠΎΡ€ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Но я добавлю ΠΊ этому Π½Π°Π±ΠΎΡ€Ρƒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ‚Ρ€ΡŽΠΊ. Π― добавлю Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ – возраст, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ возраст ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΡ€ΠΎΠ²ΠΈ. Π—Π΄Π΅ΡΡŒ я ΠΎΠΊΡ€ΡƒΠΆΡƒ Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… возраст большС 40. Π’ΠΎΡ‚ этот ΠΊΠΎΠ΄.

from scipy.spatial import ConvexHull

df2 = df.loc[:500, :]
fig = plt.figure(figsize=(16, 10), dpi= 80, facecolor='w', edgecolor='k')
for i, cat in enumerate(category):
    plt.scatter("BPXDI1", "BPXSY1", data=df2.loc[df2.DMDMARTLx==cat, :], s='dot_size', c=colors[i], label=str(cat), edgecolors='black', alpha = 0.6, linewidths=.5)
    
def encircle(x,y, ax=None, **kw):
    if not ax: ax=plt.gca()
    p = np.c_[x,y]
    hull = ConvexHull(p)
    poly = plt.Polygon(p[hull.vertices,:], **kw)
    ax.add_patch(poly)
    
# Select data where age is more than 40
df_encircle = df2.loc[(df2["RIDAGEYR"] > 40), :].dropna()
# Drawing a polygon surrounding vertices    
encircle(df_encircle.BPXDI1, df_encircle.BPXSY1, ec="k", fc="gold", alpha=0.1)
encircle(df_encircle.BPXDI1, df_encircle.BPXSY1, ec="firebrick", fc="none", linewidth=1.5)

plt.gca().set(xlabel='BPXDI1', ylabel='BPXSY1')
plt.xticks(fontsize=12); plt.yticks(fontsize=12)
plt.title("Bubble Plot with Encircling", fontsize=22)
plt.legend(fontsize=12)    
plt.show()

Π§Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΈΠ· этой Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹?

ΠšΡ€ΡƒΠΆΠΊΠΈ, ΠΎΡ‡Π΅Ρ€Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ людям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π·Π° 40 Π»Π΅Ρ‚, ΠΈΠ· нашСй Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π² 500 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ.

Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΡ€ΡƒΠΆΠΊΠΎΠ² соотвСтствуСт индСксу массы Ρ‚Π΅Π»Π° – Ρ‡Π΅ΠΌ большС ΠΊΡ€ΡƒΠΆΠΎΠΊ, Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ индСкс. Π― Π½Π΅ смогла Π½Π°ΠΉΡ‚ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΡ€ΠΎΠ²ΠΈ ΠΈ индСксом массы Ρ‚Π΅Π»Π° ΠΈΠ· этой Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹.

Π¦Π²Π΅Ρ‚Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ΅ сСмСйноС ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ΠΈΠ΄ΠΈΡ‚Π΅ Π»ΠΈ Π²Ρ‹ Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ области? Π•Π΄Π²Π° Π»ΠΈ. Π― Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Π²ΠΈΠΆΡƒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… зависимостСй ΠΌΠ΅ΠΆΠ΄Ρƒ сСмСйным ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΡ€ΠΎΠ²ΠΈ.

Π’ΠΎΡ‡Π΅Ρ‡Π½Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ (stripplot)

Π­Ρ‚ΠΎ интСрСсный Π²ΠΈΠ΄ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ. Когда мноТСство Ρ‚ΠΎΡ‡Π΅ΠΊ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ, ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ всС Ρ‚ΠΎΡ‡ΠΊΠΈ, стоит Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ "растрясти" нСсколько Ρ‚ΠΎΡ‡Π΅ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ шанс ясно ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ. ВочСчная Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ это.

Для этой дСмонстрации я Π½Π°Ρ€ΠΈΡΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ систоличСского давлСния ΠΊΡ€ΠΎΠ²ΠΈ ΠΎΡ‚ индСкса массы Ρ‚Π΅Π»Π°.

fig, ax = plt.subplots(figsize=(16, 8), dpi=80)
sns.stripplot(df2.BPXSY1, df2.BMXBMI, jitter=0.45, size=8, ax=ax, linewidth=0.5)
plt.title("Systolic Blood pressure vs Body mass index")
plt.tick_params(axis='x', which='major', labelsize=12, rotation=90)
plt.show()

Π’ΠΎΡ‡Π΅Ρ‡Π½Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ качСствСнной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½Π΅ придСтся Π΄Π΅Π»Π°Ρ‚ΡŒ это Π² Ρ†ΠΈΠΊΠ»Π΅, ΠΊΠ°ΠΊ ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ для Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ рассСяния. Π£ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ stripplot Π΅ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ hue, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сдСлаСт Π·Π° нас всю Ρ€Π°Π±ΠΎΡ‚Ρƒ. БСйчас я Π²Ρ‹Π²Π΅Π΄Ρƒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ диастоличСского давлСния ΠΎΡ‚ систоличСского с Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ этничСскому ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΡŽ.

fig, ax = plt.subplots(figsize=(16,10), dpi= 80)    
sns.stripplot(df2.BPXDI1, df2.BPXSY1, s=10, hue = df2.RIDRETH1, ax=ax)
plt.title("Stripplot for Systolic vs Diastolic Blood Pressure", fontsize=20)
plt.tick_params(rotation=90)
plt.show()

Π’ΠΎΡ‡Π΅Ρ‡Π½Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ с «ящиками»

Π’ΠΎΡ‡Π΅Ρ‡Π½Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ с «ящиками с усами». Если Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‡Π΅Π½ΡŒ большой, ΠΈ Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ, это Π΄Π°Π΅Ρ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ сами:

fig, ax = plt.subplots(figsize=(30, 12))
ax = sns.boxplot(x="BPXDI1", y = "BPXSY1", data=df)
ax.tick_params(rotation=90, labelsize=18)
ax = sns.stripplot(x = "BPXDI1", y = "BPXSY1", data=df)

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΌΠ΅Π΄ΠΈΠ°Π½Ρƒ, ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΈ максимум, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, ΠΌΠ΅ΠΆΠΊΠ²Π°Ρ€Ρ‚ΠΈΠ»ΡŒΠ½ΠΎΠ΅ расстояниС ΠΈ выбросы для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния. Π Π°Π·Π²Π΅ это Π½Π΅ прСкрасно?

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ максимум ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ· «ящика с усами», поТалуйста, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ ΡΡ‚Π°Ρ‚ΡŒΠ΅ «ПониманиС Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ гистограмм ΠΈ ящиков с усами Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅Β».

Π’ΠΎΡ‡Π΅Ρ‡Π½Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ со скрипичными

ΠœΡ‹ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ сСмСйного полоТСния (DMDMARTLx) ΠΎΡ‚ возраста (RIDAGEYR). Π‘Π½Π°Ρ‡Π°Π»Π° посмотрим, ΠΊΠ°ΠΊ ΠΎΠ½Π° выглядит, Π° ΠΏΠΎΡ‚ΠΎΠΌ смоТСм ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Π½Π΅ΠΉ дальшС.

fig, ax = plt.subplots(figsize=(30, 12))
ax = sns.violinplot(x= "DMDMARTLx", y="RIDAGEYR", data=df, inner=None, color="0.4")
ax = sns.stripplot(x= "DMDMARTLx", y="RIDAGEYR", data=df)
ax.tick_params(rotation=90, labelsize=28)

Π­Ρ‚Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ сСмСйноС ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° возраста. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° ΡΠΊΡ€ΠΈΠΏΠΈΡ‡Π½ΡƒΡŽ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ для "Married" (ΠΆΠ΅Π½Π°Ρ‚Ρ‹) – ΠΎΠ½Π° ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Ρ‹ нСзависимо ΠΎΡ‚ возраста, с нСбольшими утолщСниями. "Living with partner" (Β«Π–ΠΈΠ²Ρƒ с ΠΏΠ°Ρ€Ρ‚Π½Π΅Ρ€ΠΎΠΌΒ») ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Ρƒ для возрастов ΠΎΠΊΠΎΠ»ΠΎ 30, Π° послС 40 становится Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚ΠΎΠ½ΡŒΡˆΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΈ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… скрипичных Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ.

Π‘ΠΊΡ€ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΏΠΎΠ»Ρƒ

Π‘ΠΊΡ€ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΏΠΎΠ»Ρƒ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π±Ρ‹Π»ΠΈ Π±Ρ‹ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Π΅Π΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм это. ВмСсто возраста вСрнСмся ΠΊ диастоличСскому давлСнию ΠΊΡ€ΠΎΠ²ΠΈ. На этот Ρ€Π°Π· ΠΌΡ‹ нарисуСм Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ диастоличСского давлСния ΠΊΡ€ΠΎΠ²ΠΈ ΠΎΡ‚ сСмСйного полоТСния, с Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΠΏΠΎΠ»Ρƒ. Π‘Π±ΠΎΠΊΡƒ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ нарисуСм распрСдСлСниС диастоличСского давлСния ΠΊΡ€ΠΎΠ²ΠΈ.

fig = plt.figure(figsize=(16, 8), dpi=80)
grid=plt.GridSpec(4, 4, hspace=0.5, wspace=0.2)

ax_main = fig.add_subplot(grid[:, :-1])
ax_right = fig.add_subplot(grid[:, -1], xticklabels=[], yticklabels=[])

sns.violinplot(x= "DMDMARTLx", y = "BPXDI1", hue = "RIAGENDRx", data = df, color= "0.2", ax=ax_main)
sns.stripplot(x= "DMDMARTLx", y = "BPXDI1", data = df, ax=ax_main)

ax_right.hist(df.BPXDI1, histtype='stepfilled', orientation='horizontal', color='grey')
ax_main.title.set_fontsize(14)
ax_main.tick_params(rotation=10, labelsize=14)

plt.show()

Π—Π΄ΠΎΡ€ΠΎΠ²ΠΎ, ΠΏΡ€Π°Π²Π΄Π°? ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· этой Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹! Π­Ρ‚ΠΎΡ‚ Π²ΠΈΠ΄ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΊΠ°ΠΊ для ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΈ для ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°.

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ с Π»ΠΈΠ½ΠΈΠ΅ΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ рСгрСссии

К Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ рассСяния ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ линию, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ блиТайшСС ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠ΅ распрСдСлСния ΠΊ Π»ΠΈΠ½ΠΈΠΈ. На этот Ρ€Π°Π· ΠΌΡ‹ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ роста (BMXHT) ΠΎΡ‚ вСса (BMXWT), Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΏΠΎΠ»Ρƒ (RIAGENDR). Π― объясню ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ послС Π²Ρ‹Π²ΠΎΠ΄Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹.

g = sns.lmplot(x='BMXHT', y='BMXWT', hue = 'RIAGENDRx', data = df2,
              aspect = 1.5, robust=True, palette='tab10',
              scatter_kws=dict(s=60, linewidths=.7, edgecolors='black'))
plt.title("Height vs weight with line of best fit grouped by Gender", fontsize=20)
plt.show()

Π’ этой Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΡƒΠΆΡ‡ΠΈΠ½ ΠΈ ΠΆΠ΅Π½Ρ‰ΠΈΠ½, выполняСмоС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ 'hue'. Из этого рисунка ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ рост ΠΈ вСс муТской популяции Π² срСднСм Π²Ρ‹ΡˆΠ΅, Ρ‡Π΅ΠΌ ТСнской. Как для ΠΌΡƒΠΆΡ‡ΠΈΠ½, Ρ‚Π°ΠΊ ΠΈ для ΠΆΠ΅Π½Ρ‰ΠΈΠ½ Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ Π»ΠΈΠ½ΠΈΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ рСгрСссии.

Π˜Π½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ с Π»ΠΈΠ½ΠΈΠ΅ΠΉ рСгрСссии

ΠœΡ‹ помСстили Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΌΡƒΠΆΡ‡ΠΈΠ½Π°Ρ… ΠΈ ΠΆΠ΅Π½Ρ‰ΠΈΠ½Π°Ρ… Π² ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ, ΠΈ это сработало, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ‚ΠΊΠΎΠ΅, ΠΈ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ всСго Π΄Π²Π΅. Но ΠΈΠ½ΠΎΠ³Π΄Π° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΉ слишком ΠΌΠ½ΠΎΠ³ΠΎ, Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ слишком ΠΌΠ½ΠΎΠ³ΠΎ.

Π’ этом ΠΏΡƒΠ½ΠΊΡ‚Π΅ ΠΌΡ‹ нарисуСм lmplot'Ρ‹ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°Ρ…. Рост ΠΈ вСс ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ для Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ этничСского происхоТдСния (RIDRETH1). ВмСсто ΠΏΠΎΠ»Π° ΠΌΡ‹ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ рост ΠΈ вСс для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ этничСской Π³Ρ€ΡƒΠΏΠΏΡ‹ Π² Ρ€Π°Π·Π½Ρ‹Ρ… Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°Ρ….

fig = plt.figure(figsize=(20, 8), dpi=80)
g = sns.lmplot(x='BMXHT', y='BMXWT', data = df2, robust = True,
              palette="Set1", col="RIDRETH1",
              scatter_kws=dict(s=60, linewidths=0.7, edgecolors="black"))
plt.xticks(fontsize=12, )
plt.yticks(fontsize=12)
plt.show()

ΠŸΠ°Ρ€Π½Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΠ°Ρ€Π½Ρ‹Π΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΡ‡Π΅Π½ΡŒ популярны ΠΏΡ€ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… (exploratory data analysis, EDA). ΠŸΠ°Ρ€Π½Π°Ρ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΡ‚ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° я Π½Π°Ρ€ΠΈΡΡƒΡŽ ΠΏΠ°Ρ€Π½ΡƒΡŽ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ для роста, вСса, индСкса массы Ρ‚Π΅Π»Π° ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΏΠΎ Ρ‚Π°Π»ΠΈΠΈ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎ этничСской Π³Ρ€ΡƒΠΏΠΏΠ΅. Π― Π±Π΅Ρ€Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΡƒΡŽ 1000 элСмСнтов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ понятной.

df3 = df.loc[:1000, :]
plt.figure(figsize=(10,8), dpi= 80)
sns.pairplot(df3[['BMXWT', 'BMXHT', 'BMXBMI', 'BMXWAIST', "RIDRETH1"]], kind="scatter", hue="RIDRETH1", plot_kws=dict(s=30))
plt.show()

РасходящиСся столбики

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° с расходящимися столбиками (diverging bars) Π΄Π°Π΅Ρ‚ быстрый взгляд Π½Π° Π΄Π°Π½Π½Ρ‹Π΅. Π‘ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ ΠΎΠ΄Π½ΠΈΠΌ взглядом Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ, насколько Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΡΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ. Π― ΠΏΠΎΠΊΠ°ΠΆΡƒ Π΄Π²Π° Π²ΠΈΠ΄Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ с расходящимися столбиками: Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄Π½Π° качСствСнная пСрСмСнная ΠΏΠΎ оси x, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ – Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΎΠ±ΠΎΠΈΠΌ осям.

Π’ΠΎΡ‚ пСрвая ΠΈΠ· Π½ΠΈΡ…. Π― Π²Ρ‹Π²Π΅Π΄Ρƒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄ΠΎΠΌΠ° (качСствСнная пСрСмСнная) ΠΏΠΎ оси y, Π° ΠΏΠΎ оси x Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ систоличСскоС Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΡ€ΠΎΠ²ΠΈ. ΠœΡ‹ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΡƒΠ΅ΠΌ систоличСскоС Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стандартной Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ Π΄Π°Π½Π½Ρ‹Π΅ Π² этом мСстС.

Π’ этой Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π²Π° Ρ†Π²Π΅Ρ‚Π°. ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния, Π° синий – ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅. Π­Ρ‚Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΎΠ΄Π½ΠΈΠΌ взглядом ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ распрСдСляСтся Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΡ€ΠΎΠ²ΠΈ Π² зависимости ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π΄ΠΎΠΌΠ°.

x = df.loc[:, "BPXSY1"]
df["BPXSY1_n"] = (x - x.mean())/x.std()
df['colors'] = ['red' if i < 0 else 'blue' for i in df["BPXSY1_n"]]
df.sort_values("BPXSY1_n", inplace=True)
df.reset_index(inplace=True)
plt.figure(figsize=(16, 10), dpi=80)
plt.hlines(y = df.DMDHHSIZ, xmin=0, xmax = df.BPXSY1_n, color=df.colors, linewidth=3)
plt.gca().set(ylabel="DMDHHSIZ", xlabel = "BPXSY1_n")
plt.yticks(df.DMDHHSIZ, fontsize=14)
plt.grid(linestyle='--', alpha=0.5)
plt.show()

Π—Π΄Π΅ΡΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄ΠΎΠΌΠ° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ Π½Π° нСсколько Π³Ρ€ΡƒΠΏΠΏ. Π’ Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π΄ΠΎΠΌΠ° дСлятся Π½Π° Π³Ρ€ΡƒΠΏΠΏΡ‹, Π½ΠΎ ΠΏΠΎ этой Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ распрСдСляСтся Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΡ€ΠΎΠ²ΠΈ Π² зависимости ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π΄ΠΎΠΌΠ°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ провСсти дальнСйший Π°Π½Π°Π»ΠΈΠ·.

Π― Π½Π°Ρ€ΠΈΡΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠΊΠ°ΠΆΡƒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ систоличСского давлСния ΠΊΡ€ΠΎΠ²ΠΈ ΠΎΡ‚ возраста. ΠœΡ‹ ΡƒΠΆΠ΅ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ систоличСскоС Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ для ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ просто погрузимся Π² Π½Π°ΡˆΡƒ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ.

x = df.loc[:, "BPXSY1"]
df['colors'] = ['coral' if i < 0 else 'lightgreen' for i in df["BPXSY1_n"]]
y_ticks = np.arange(16, 82, 8)
plt.figure(figsize=(16, 10), dpi=80)
plt.hlines(y = df.RIDAGEYR, xmin=0, xmax = df.BPXSY1_n, color=df.colors, linewidth=3)
plt.gca().set(ylabel="RIDAGEYR", xlabel = "BPXSY1")
plt.yticks(y_ticks, fontsize=14)
plt.grid(linestyle='--', alpha=0.5)
plt.show()

Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ выглядит Ρ‚Π°ΠΊΠΈΠΌ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ. БистоличСскоС Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΡ€ΠΎΠ²ΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ растСт с возрастом. НС ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ?

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

На сСгодня всС. Π’ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… Python доступно мноТСство прСкрасных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Если Π²Ρ‹ рСгулярно ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π΄Π΅Π»ΠΎ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Но ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡ… Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π·Π½Π°ΠΉΡ‚Π΅ ΠΎΠ± ΠΈΡ… сущСствовании ΠΈ ΠΏΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒΠΉΡ‚Π΅ΡΡŒ Π² ΠΈΡ… использовании нСсколько Ρ€Π°Π·, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ нСобходимости Π²Ρ‹ смогли Π½Π°ΠΉΡ‚ΠΈ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² Google, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ ΡΡ‚Π°Ρ‚ΡŒΡΡ… Π²Ρ€ΠΎΠ΄Π΅ этой. НадСюсь, Ρ‡Ρ‚ΠΎ Π²Ρ‹ смоТСтС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ для достиТСния Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ красивых Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ².

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

admin
11 дСкабря 2018

ООП Π½Π° Python: ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python допускаСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π½ΠΎ Π² Π΅Π³ΠΎ основС...
admin
14 июля 2017

ПишСм свою Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒ: пошаговоС руководство

ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π³Π°ΠΉΠ΄ ΠΏΡ€ΠΎ Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΈΠ· ΠΊΠ°ΠΊΠΈΡ… элСмС...
admin
13 фСвраля 2017

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python: ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° Π΄ΠΎ профСссионала

Пошаговая инструкция для всСх, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒΒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python...