πŸ“Š Π’Π°ΡˆΠ° повсСднСвная ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° ΠΏΠΎ Matplotlib

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π²Π°ΡˆΠ΅ΠΌΡƒ вниманию ΠΏΠΎΠ»Π½ΠΎΠ΅ руководство ΠΏΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Python. Π’ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΈ исправлСны Π΄ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ ошибки Π² ΠΊΠΎΠ΄Π΅.

Matplotlib – Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ инструмСнт Π½Π° Python. Он ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ мноТСством срСд, Ρ‚Π°ΠΊΠΈΡ…, ΠΊΠ°ΠΊ Π²Π΅Π±-сСрвСры ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, графичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, Jupiter Notebook, iPython Notebook ΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° iPython.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ
ВСкст публикуСтся Π² ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅, Π°Π²Ρ‚ΠΎΡ€ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ – Rashida Nasrin Sucky. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π΅ содСрТали большоС количСство ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΡˆΠ΅ΠΌΡƒ Π°Π²Ρ‚ΠΎΡ€Ρƒ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π² русскоязычной вСрсии ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

АрхитСктура Matplotlib

Matplotlib ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ основных слоя: слой Π½ΠΈΠΆΠ½Π΅Π³ΠΎ уровня (backend), слой рисунков ΠΈ слой скриптов. Π‘Π»ΠΎΠΉ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ уровня содСрТит Ρ‚Ρ€ΠΈ интСрфСйсных класса: ΠΊΠ°Π½Π²Π° рисунка (figure canvas), ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ рисунка, прорисовщик (renderer), ΡƒΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π° этой ΠΊΠ°Π½Π²Π΅, ΠΈ событиС (event), ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ Π²Π²ΠΎΠ΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π²Ρ€ΠΎΠ΄Π΅ Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠ² ΠΌΡ‹ΡˆΠΈ. Π‘Π»ΠΎΠΉ рисунков Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Renderer'Π° ΠΈ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΊΠ°Π½Π²Π΅. ВсС, Ρ‡Ρ‚ΠΎ находится Π½Π° рисункС Matplotlib, являСтся экзСмпляром слоя рисунка (artist). ЗасСчки, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΌΠ΅Ρ‚ΠΊΠΈ – всС это ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ слоя рисунков. Π‘Π»ΠΎΠΉ скриптов – это ΠΎΠ±Π»Π΅Π³Ρ‡Π΅Π½Π½Ρ‹ΠΉ интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½ для Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠ³ΠΎ примСнСния. ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ слой скриптов ΠΈ срСду Jupiter Notebook.

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ для обучСния, я Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π²Π°ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… – часто выполняСмая Π·Π°Π΄Π°Ρ‡Π° ΠΏΠ΅Ρ€Π΅Π΄ Π»ΡŽΠ±Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ ΠΏΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π°Π½Π½Ρ‹Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ приходят Π² Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹. Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ± ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π² ΠšΠ°Π½Π°Π΄Ρƒ. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ….

ΠžΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°
Для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Ρ„Π°ΠΉΠ»Π° xlsx Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ xlrd, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½ΠΎΠ²Ρ‹Π΅ вСрсии этого ΠΏΠ°ΠΊΠ΅Ρ‚Π° пСрСстали Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ xlsx ΠΏΠΎ сообраТСниям бСзопасности. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ», установитС ΡΡ‚Π°Ρ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ xlrd ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ pip install xlrd==1.2.0.
import numpy as np  
import pandas as pd
df = pd.read_excel('https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DV0101EN/labs/Data_Files/Canada.xlsx',
                       sheet_name='Canada by Citizenship',
                       skiprows=range(20),
                       skipfooter=2)
df.head()

Π― ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°ΡŽ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 20 строк ΠΈ послСдниС Π΄Π²Π΅ строки, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это тСкст, Π° Π½Π΅ Π΄Π°Π½Π½Ρ‹Π΅ с табуляциСй. Набор Π΄Π°Π½Π½Ρ‹Ρ… слишком Π²Π΅Π»ΠΈΠΊ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ я Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прСдставлСниС ΠΎ Π½Π°Π±ΠΎΡ€Π΅, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΈΠΌΠ΅Π½Π° столбцов:

df.columns
# Π’Ρ‹Π²ΠΎΠ΄:
# Index([    'Type', 'Coverage',   'OdName',     'AREA', 'AreaName',      'REG',
#        'RegName',      'DEV',  'DevName',       1980,       1981,       1982,
#             1983,       1984,       1985,       1986,       1987,       1988,
#             1989,       1990,       1991,       1992,       1993,       1994,
#             1995,       1996,       1997,       1998,       1999,       2000,
#             2001,       2002,       2003,       2004,       2005,       2006,
#             2007,       2008,       2009,       2010,       2011,       2012,
#             2013],
#      dtype='object')

ΠœΡ‹ Π½Π΅ собираСмся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС эти столбцы Π² нашСй ΡΡ‚Π°Ρ‚ΡŒΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ избавимся ΠΎΡ‚ столбцов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… мСньшим ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ управляСмым.

df.drop(['AREA','REG','DEV','Type','Coverage'], axis=1, inplace=True)
df.head()

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° эти столбцы. Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† 'OdName' – Π½Π° самом Π΄Π΅Π»Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ страны, 'AreaName' – ΠΊΠΎΠ½Ρ‚ΠΈΠ½Π΅Π½Ρ‚, Π° 'RegName' – Ρ€Π΅Π³ΠΈΠΎΠ½ Π½Π° этом ΠΊΠΎΠ½Ρ‚ΠΈΠ½Π΅Π½Ρ‚Π΅. ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌ эти столбцы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΈΠΌΠ΅Π½Π° стали Π±ΠΎΠ»Π΅Π΅ понятными.

df.rename(columns={'OdName':'Country', 'AreaName':'Continent', 'RegName':'Region'}, inplace=True)
df.columns
# Π’Ρ‹Π²ΠΎΠ΄:
# Index([  'Country', 'Continent',    'Region',   'DevName',        1980,
#              1981,        1982,        1983,        1984,        1985,
#              1986,        1987,        1988,        1989,        1990,
#              1991,        1992,        1993,        1994,        1995,
#              1996,        1997,        1998,        1999,        2000,
#              2001,        2002,        2003,        2004,        2005,
#              2006,        2007,        2008,        2009,        2010,
#              2011,        2012,        2013],
#      dtype='object')

Π’Π΅ΠΏΠ΅Ρ€ΡŒ наш Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… стал Π±ΠΎΠ»Π΅Π΅ простым для понимания. Π£ нас Π΅ΡΡ‚ΡŒ Country, Continent, Region, Π° DevName ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, являСтся Π»ΠΈ страна Ρ€Π°Π·Π²ΠΈΡ‚ΠΎΠΉ ΠΈΠ»ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉΡΡ. ВсС столбцы с Π³ΠΎΠ΄Π°ΠΌΠΈ содСрТат количСство ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ² Π² ΠšΠ°Π½Π°Π΄Ρƒ ΠΈΠ· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ страны Π·Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π³ΠΎΠ΄. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ столбСц 'Total' ('ВсСго'), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ ΠΎΠ±Ρ‰Π΅Π΅ количСство ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ² ΠΈΠ· этой страны с 1980-Π³ΠΎ Π΄ΠΎ 2013-Π³ΠΎ.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, Π² ΠΊΠΎΠ½Ρ†Π΅ добавился Π½ΠΎΠ²Ρ‹ΠΉ столбСц 'Total'.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π² Π½Π°Π±ΠΎΡ€Π΅ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ значСния null.

df.isnull().sum()

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ 0 Π²ΠΎ всСх столбцах, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² Π½Π°Π±ΠΎΡ€Π΅ Π½Π΅Ρ‚ пропусков. Π― люблю Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π² качСствС индСкса Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΠΉ столбСц, Π° Π½Π΅ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Ρ†ΠΈΡ„Ρ€Ρ‹, поэтому установим столбСц 'Country' Π² качСствС индСкса.

df = df.set_index('Country')

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… достаточно чист ΠΈ красив, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌ, поэтому большС Ρ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΌΡ‹ Π½Π΅ станСм. Если Π½Π°ΠΌ потрСбуСтся Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅, ΠΌΡ‹ сдСлаСм это ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.

УпраТнСния ΠΏΠΎ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡŽ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ – Ρ‚Π°ΠΊΠΈΡ…, ΠΊΠ°ΠΊ линСйная Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° (line plot), Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° с областями (area plot), сСкторная Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° (pie plot), Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° рассСяния (scatter plot), гистограмма, столбчатая Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° (bar graph). Π‘Π½Π°Ρ‡Π°Π»Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹.

%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib as mpl

Π’Ρ‹Π±Π΅Ρ€Π΅ΠΌ ΡΡ‚ΠΈΠ»ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΌ Π½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ слишком ΡƒΡ‚Ρ€ΡƒΠΆΠ΄Π°Ρ‚ΡŒΡΡ установкой стиля Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹. Π’ΠΎΡ‚ список доступных стилСй:

plt.style.available
# Π’Ρ‹Π²ΠΎΠ΄:
# ['bmh',
#  'classic',
#  'dark_background',
#  'fast',
#  'fivethirtyeight',
#  'ggplot',
#  'grayscale',
#  'seaborn-bright',
#  'seaborn-colorblind',
#  'seaborn-dark-palette',
#  'seaborn-dark',
#  'seaborn-darkgrid',
#  'seaborn-deep',
#  'seaborn-muted',
#  'seaborn-notebook',
#  'seaborn-paper',
#  'seaborn-pastel',
#  'seaborn-poster',
#  'seaborn-talk',
#  'seaborn-ticks',
#  'seaborn-white',
#  'seaborn-whitegrid',
#  'seaborn',
#  'Solarize_Light2',
#  'tableau-colorblind10',
#  '_classic_test']

Π― Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚ΠΈΠ»ΡŒ 'ggplot'. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·ΡΡ‚ΡŒ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡΡ‚ΠΈΠ»ΡŒ ΠΏΠΎ своСму вкусу.

mpl.style.use(['ggplot'])

ЛинСйная Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°

Π‘ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π² ΠšΠ°Π½Π°Π΄Ρƒ для ΠΎΠ΄Π½ΠΎΠΉ страны. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ список Π»Π΅Ρ‚ с 1980-Π³ΠΎ Π΄ΠΎ 2013-Π³ΠΎ:

years = list(range(1980, 2014))

Π― Π²Ρ‹Π±Ρ€Π°Π»Π° для этой дСмонстрации Π¨Π²Π΅ΠΉΡ†Π°Ρ€ΠΈΡŽ. ΠŸΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ нашим Π³ΠΎΠ΄Π°ΠΌ для этой страны.

df.loc['Switzerland', years]
Π”Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ· Π¨Π²Π΅ΠΉΡ†Π°Ρ€ΠΈΠΈ (Ρ‡Π°ΡΡ‚ΡŒ)

Настало врСмя Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ просто: достаточно Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ plot для ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Ρ… Π½Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π—Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈ ΠΌΠ΅Ρ‚ΠΊΠΈ для осСй x ΠΈ y.

df.loc['Switzerland', years].plot()
plt.title('Immigration from Switzerland')
plt.ylabel('Number of immigrants')
plt.xlabel('Years')
plt.show()

Π§Ρ‚ΠΎ, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ вывСсти Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… стран сразу, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΠΈ ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ· этих стран Π² ΠšΠ°Π½Π°Π΄Ρƒ? Π­Ρ‚ΠΎ дСлаСтся ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. НарисуСм Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… юТно-азиатских стран: Индии, ΠŸΠ°ΠΊΠΈΡΡ‚Π°Π½Π° ΠΈ Π‘Π°Π½Π³Π»Π°Π΄Π΅Ρˆ ΠΏΠΎ Π³ΠΎΠ΄Π°ΠΌ.

ind_pak_ban = df.loc[['India', 'Pakistan', 'Bangladesh'], years]
ind_pak_ban.head()

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ этих Π΄Π°Π½Π½Ρ‹Ρ… – ΠΎΠ½ отличаСтся ΠΎΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ Π¨Π²Π΅ΠΉΡ†Π°Ρ€ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅ΠΆΠ΄Π΅. Если ΠΌΡ‹ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ plot для этого DataFrame (ind_pak_ban), ΠΎΠ½Π° Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ количСство ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ странС ΠΏΠΎ оси x ΠΈ Π³ΠΎΠ΄Ρ‹ ΠΏΠΎ оси y. Нам Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…:

ind_pak_ban.T

Π­Ρ‚ΠΎ Π½Π΅ вСсь Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ Ρ‡Π°ΡΡ‚ΡŒ. Π’ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… измСнился. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π³ΠΎΠ΄Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ оси x, Π° количСство ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ² ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страны ΠΏΠΎ оси y.

ind_pak_ban.T.plot()

Нам Π½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ линСйная Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° рисуСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

БСкторная Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ΅ΠΊΡ‚ΠΎΡ€Π½ΡƒΡŽ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ, построим Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ ΠΎΠ±Ρ‰Π΅Π³ΠΎ количСства ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚ΠΈΠ½Π΅Π½Ρ‚Π°. Π£ нас Π΅ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ странС. Π”Π°Π²Π°ΠΉΡ‚Π΅ сгруппируСм Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΊΠΎΠ½Ρ‚ΠΈΠ½Π΅Π½Ρ‚Π°ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ количСство ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚ΠΈΠ½Π΅Π½Ρ‚Π°.

cont = df.groupby('Continent', axis=0).sum()

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ±Ρ‰Π΅Π΅ количСство ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚ΠΈΠ½Π΅Π½Ρ‚Π°. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ вывСсти этот DataFrame, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π― Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠΆΡƒ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ слишком ΠΌΠ½ΠΎΠ³ΠΎ мСста ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ. Π”Π°Π²Π°ΠΉΡ‚Π΅ нарисуСм эту Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ.

cont['Total'].plot(kind='pie', figsize=(7,7),
                  autopct='%1.1f%%',
                  shadow=True)
# plt.title('Immigration By Continenets')
plt.axis('equal')
plt.show()

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠ½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ 'kind'. ВсС Π²ΠΈΠ΄Ρ‹ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ, ΠΊΡ€ΠΎΠΌΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ plot Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ явно. Π― Π²Π²ΠΎΠΆΡƒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ 'figsize', ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹.

Π­Ρ‚Π° сСкторная Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° достаточно понятна, Π½ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π΅ Π΅Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅ΠΉ. На этот Ρ€Π°Π· я ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»ΡŽ собствСнныС Ρ†Π²Π΅Ρ‚Π° ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ».

colors = ['lightgreen', 'lightblue', 'pink', 'purple', 'grey', 'gold']
explode=[0.1, 0, 0, 0, 0.1, 0.1]
cont['Total'].plot(kind='pie', figsize=(17, 10),
                  autopct = '%1.1f%%', startangle=90,
                  shadow=True, labels=None, pctdistance=1.12, colors=colors, explode = explode)
plt.axis('equal')
plt.legend(labels=cont.index, loc='upper right', fontsize=14)
plt.show()
Π Π°Π·Π²Π΅ эта Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π»ΡƒΡ‡ΡˆΠ΅? МнС ΠΎΠ½Π° нравится большС

Π―Ρ‰ΠΈΠΊ с усами (boxplot)

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ построим "ящик с усами" для количСства ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ² ΠΈΠ· ΠšΠΈΡ‚Π°Ρ.

china = df.loc[['China'], years].T

Π’ΠΎΡ‚ наши Π΄Π°Π½Π½Ρ‹Π΅. А Π²ΠΎΡ‚ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°, построСнная ΠΏΠΎ этим Π΄Π°Π½Π½Ρ‹ΠΌ.

china.plot(kind='box', figsize=(8, 6))
plt.title('Box plot of Chinese Immigrants')
plt.ylabel('Number of Immigrants')
plt.show()

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΠ²Π΅ΠΆΠΈΡ‚ΡŒ свои знания ΠΏΡ€ΠΎ "ящики с усами", поТалуйста, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ ΡΡ‚Π°Ρ‚ΡŒΠ΅ "ΠŸΡ€ΠΈΠΌΠ΅Ρ€ понимания Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ гистограммы ΠΈ ящика с усами".

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ нСсколько ящиков с усами Π² ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ DataFrame ind_pak_ban ΠΈ нарисуСм ящики для количСства ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ² ΠΈΠ· Индии, ΠŸΠ°ΠΊΠΈΡΡ‚Π°Π½Π° ΠΈ Π‘Π°Π½Π³Π»Π°Π΄Π΅Ρˆ.

ind_pak_ban.T.plot(kind='box', figsize=(8, 7))
plt.title('Box plots of Inian, Pakistan and Bangladesh Immigrants')
plt.ylabel('Number of Immigrants')

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

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ рассСяния Π»ΡƒΡ‡ΡˆΠ΅ всСго подходят для исслСдования зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΠΌ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ рассСяния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚Ρ€Π΅Π½Π΄ количСства ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ² Π² ΠšΠ°Π½Π°Π΄Ρƒ Π·Π° Π³ΠΎΠ΄Ρ‹.

Для этого упраТнСния ΠΌΡ‹ создадим Π½ΠΎΠ²Ρ‹ΠΉ DataFrame, содСрТащий Π³ΠΎΠ΄Ρ‹ Π² качСствС индСкса ΠΈ ΠΎΠ±Ρ‰Π΅Π΅ количСство ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ² Π·Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π³ΠΎΠ΄.

totalPerYear = pd.DataFrame(df[years].sum(axis=0))
totalPerYear.head()

Нам Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΎΠ΄Ρ‹ Π² Ρ†Π΅Π»Ρ‹Π΅ числа. Π― Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ‡Ρƒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΡ‡Π΅ΡΠ°Ρ‚ΡŒ DataFrame, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

totalPerYear.index = map(int, totalPerYear.index)
totalPerYear.reset_index(inplace=True)
totalPerYear.columns = ['year', 'total']
totalPerYear.head()

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ осСй x ΠΈ y для Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ рассСяния.

totalPerYear.plot(kind='scatter', x = 'year', y='total', figsize=(10, 6), color='darkred')
plt.title('Total Immigration from 1980 - 2013')
plt.xlabel('Year')
plt.ylabel('Number of Immigrants')
plt.show()

ΠŸΠΎΡ…ΠΎΠΆΠ΅, здСсь Π΅ΡΡ‚ΡŒ линСйная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π³ΠΎΠ΄ΠΎΠΌ ΠΈ количСством ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ². Π‘ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π»Π΅Ρ‚ количСство ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ² ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ явно растущий Ρ‚Ρ€Π΅Π½Π΄.

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° с областями

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° с областями ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΏΠΎΠ΄ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ. Для этой Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ я Ρ…ΠΎΡ‡Ρƒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ DataFrame, содСрТащий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ Индии, ΠšΠΈΡ‚Π°ΡŽ, ΠŸΠ°ΠΊΠΈΡΡ‚Π°Π½Ρƒ ΠΈ Π€Ρ€Π°Π½Ρ†ΠΈΠΈ.

top = df.loc[['India', 'China', 'Pakistan', 'France'], years]
top = top.T

Набор Π΄Π°Π½Π½Ρ‹Ρ… Π³ΠΎΡ‚ΠΎΠ². ΠŸΠΎΡ€Π° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ.

colors = ['black', 'green', 'blue', 'red']
top.plot(kind='area', stacked=False, figsize=(20, 10), color=colors)
plt.title('Immigration trend from Europe')
plt.ylabel('Number of Immigrants')
plt.xlabel('Years')
plt.show()

НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ 'stacked', Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ области для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ страны. Если Π½Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ stacked = False, Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Если Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° stacked (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, соотвСтствуСт Π½Π΅ Ρ€Π°ΡΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π΄ΠΎ оси x, Π° Ρ€Π°ΡΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π΄ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Гистограмма

Гистограмма ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ распрСдСлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’ΠΎΡ‚ Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

df[2005].plot(kind='hist', figsize=(8,5))
plt.title('Histogram of Immigration from 195 Countries in 2005') # Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ гистограммы
plt.ylabel('Number of Countries') # y-ΠΌΠ΅Ρ‚ΠΊΠ°
plt.xlabel('Number of Immigrants') # x-ΠΌΠ΅Ρ‚ΠΊΠ°
plt.show()

ΠœΡ‹ построили гистограмму, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ распрСдСлСниС ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π·Π° 2005 Π³ΠΎΠ΄. Гистограмма ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠ· Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° стран ΠΏΡ€ΠΈΠ΅Ρ…Π°Π»ΠΎ ΠΎΡ‚ 0 Π΄ΠΎ 5000 ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ². Волько нСсколько стран прислали 20 тысяч, ΠΈ Π΅Ρ‰Π΅ ΠΏΠ°Ρ€Π° стран прислала ΠΏΠΎ 40 тысяч ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ².

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ DataFrame top ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈ нарисуСм распрСдСлСниС количСства ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ² ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страны Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ гистограммС.

top.plot.hist()
plt.title('Histogram of Immigration from Some Populous Countries')
plt.ylabel('Number of Years')
plt.xlabel('Number of Immigrants')
plt.show()

На ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ гистограммС ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… стран ΠΏΡ€ΠΈΠ΅Ρ…Π°Π»ΠΎ 20 ΠΈ 40 тысяч ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ². ΠŸΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠšΠΈΡ‚Π°ΠΉ ΠΈ Индия срСди этих "Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ…". На этой гистограммС ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‡Π΅Ρ‚ΠΊΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ столбцами. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΠΌ Π΅Π΅.

Π—Π°Π΄Π°Π΅ΠΌ количСство столбцов ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΈΡ… Π³Ρ€Π°Π½ΠΈΡ†Ρ‹.

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ 15 столбцов. Π—Π΄Π΅ΡΡŒ я Π²Π²ΠΎΠΆΡƒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ 'alpha' – ΠΎΠ½ опрСдСляСт ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ΠΎΠ². Для Ρ‚Π°ΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ, ΠΊΠ°ΠΊ наша, ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π²Π°ΠΆΠ½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ распрСдСлСния.

count, bin_edges = np.histogram(top, 15)
top.plot(kind = 'hist', figsize=(14, 6), bins=15, alpha=0.6, 
        xticks=bin_edges, color=colors)
Гистограмма с ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒΡŽ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ распрСдСлСниС.

Как ΠΈ для Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ с областями, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ 'stacked', Π½ΠΎ для гистограмм ΠΎΠ½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½.

top.plot(kind='hist',
          figsize=(12, 6), 
          bins=15,
          xticks=bin_edges,
          color=colors,
          stacked=True,
         )
plt.title('Histogram of Immigration from Some Populous Countries')
plt.ylabel('Number of Years')
plt.xlabel('Number of Immigrants')
plt.show()

Бтолбчатая Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°

Для столбчатой Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ количСство ΠΈΠΌΠΌΠΈΠ³Ρ€Π°Π½Ρ‚ΠΎΠ² ΠΈΠ· Π€Ρ€Π°Π½Ρ†ΠΈΠΈ Π·Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π³ΠΎΠ΄.

france = df.loc['France', years]
france.plot(kind='bar', figsize = (10, 6))
plt.xlabel('Year') 
plt.ylabel('Number of immigrants') 
plt.title('Immigrants From France')
plt.show()

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ столбчатой Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π­Ρ‚Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ растущий Ρ‚Ρ€Π΅Π½Π΄ с 1997 Π³ΠΎΠ΄Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° Π΄Π΅ΠΊΠ°Π΄Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ annotate.

france.plot(kind='bar', figsize = (10, 6))
plt.xlabel('Year') 
plt.ylabel('Number of immigrants') 
plt.title('Immigrants From France')
plt.annotate('Increasing Trend',
            xy = (19, 4500),
            rotation= 23,
            va = 'bottom',
            ha = 'left')
plt.annotate('',
            xy=(29, 5500),
            xytext=(17, 3800),
            xycoords='data',
            arrowprops=dict(arrowstyle='->', connectionstyle='arc3', color='black', lw=1.5))
plt.show()

Иногда Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ располоТСниС столбцов Π΄Π΅Π»Π°Π΅Ρ‚ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ Π±ΠΎΠ»Π΅Π΅ понятной. Π•Ρ‰Π΅ Π»ΡƒΡ‡ΡˆΠ΅, Ссли ΠΌΠ΅Ρ‚ΠΊΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚ΡΡ прямо Π½Π° столбцах. Π”Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм это.

france.plot(kind='barh', figsize=(12, 16), color='steelblue')
plt.xlabel('Year') # add to x-label to the plot
plt.ylabel('Number of immigrants') # add y-label to the plot
plt.title('Immigrants From France') # add title to the plot
for index, value in enumerate(france):
    label = format(int(value), ',')
    plt.annotate(label, xy=(value-300, index-0.1), color='white')
    
plt.show()

Π Π°Π·Π²Π΅ эта Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° выглядит Π½Π΅ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ прСдыдущая?

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ основы Matplotlib. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ вас достаточно Π·Π½Π°Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ использованиС Matplotlib прямо сСгодня.

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ описаны Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ…:

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

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

admin
11 дСкабря 2018

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

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

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

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

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

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