рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдореЗрдВ рдЪреБрдирд╛рд╡реЛрдВ рдХрд╛ рдПрдХ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ - рдЖрд╡рд╛рдЬ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ рдЬрд╛рджреВ

рдирдорд╕реНрддреЗ!

рдЗрд╕ (2019) рд╡рд░реНрд╖ рдХреЗ рд╕рд┐рддрдВрдмрд░ рдореЗрдВ, рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдХреЗ рдЧрд╡рд░реНрдирд░ рдХрд╛ рдЪреБрдирд╛рд╡ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рднреА рдорддрджрд╛рди рдбреЗрдЯрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЪреБрдирд╛рд╡ рдЖрдпреЛрдЧ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рддреЛрдбрд╝реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдмрд╕ рдЗрд╕ рд╡реЗрдмрд╕рд╛рдЗрдЯ www.st-petersburg.vybory.izbirkom.ru рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдЬрд┐рд╕ рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рдо рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдФрд░ рдХреБрдЫ рдХреА рдкрд╣рдЪрд╛рди рдХрд░реЗрдВрдЧреЗ "рдореИрдЬрд┐рдХ" рдкреИрдЯрд░реНрдиред

рдЖрдорддреМрд░ рдкрд░ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВ Google Colab рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдПрдХ рдРрд╕реА рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЬреНрдпреВрдкрд┐рдЯрд░ рдиреЛрдЯрдмреБрдХ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдФрд░ рдореБрдлреНрдд рдореЗрдВ GPU (NVidia Tesla K80) рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдбреЗрдЯрд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдФрд░ рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд╛рдлреА рддреЗрдЬреА рд▓рд╛рдПрдЧрд╛ред рдЖрдпрд╛рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореБрдЭреЗ рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред

%%time !apt update !apt upgrade !apt install gdal-bin python-gdal python3-gdal # Install rtree - Geopandas requirment !apt install python3-rtree # Install Geopandas !pip install git+git://github.com/geopandas/geopandas.git # Install descartes - Geopandas requirment !pip install descartes 

рдЖрдЧреЗ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред

 import requests from bs4 import BeautifulSoup import numpy as np import pandas as pd import matplotlib.pyplot as plt import geopandas as gpd import xlrd 

рдкреНрд░рдпреБрдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг


  • рдЕрдиреБрд░реЛрдз - рдХрд┐рд╕реА рд╕рд╛рдЗрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓

  • рд╕реБрдВрджрд░рд╕реБрдкреЗ - HTML рдФрд░ xml рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓; рдЖрдк рд╕реАрдзреЗ html рдореЗрдВ рдХрд┐рд╕реА рднреА рдЯреИрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ

  • numpy - рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдореВрд▓ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЧрдгрд┐рддреАрдп рдореЙрдбреНрдпреВрд▓

  • рдкрд╛рдВрдбрд╛ - рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп

  • matplotlib.pyplot - рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдореЙрдбреНрдпреВрд▓-рд╕реЗрдЯ

  • geopandas - рдЪреБрдирд╛рд╡ рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓

  • xlrd - рддрд╛рд▓рд┐рдХрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓

рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд╡рдпрдВ, рдкрд╛рд░реНрд╕рд┐рдо рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЪреБрдирд╛рд╡ рд╕рдорд┐рддрд┐ рдиреЗ рд╣рдорд╛рд░реЗ рд╕рдордп рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрд╛ рдФрд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХреА, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

 ### Parser list_of_TIKS = [] for i in range (1, 31): list_of_TIKS.append('   тДЦ' + str(i)) num_of_voters = [] num_of_voters_voted = [] appearence = [] votes_for_Amosov_percent = [] votes_for_Beglov_percent = [] votes_for_Tikhonova_percent = [] url = "http://www.st-petersburg.vybory.izbirkom.ru/region/region/st-petersburg?action=show&root=1&tvd=27820001217417&vrn=27820001217413&region=78&global=&sub_region=78&prver=0&pronetvd=null&vibid=27820001217417&type=222" response = requests.get(url) page = BeautifulSoup(response.content, "lxml") main_links = page.find_all('a') for TIK in list_of_TIKS: for main_tag in main_links: main_link = main_tag.get('href') if TIK in main_tag: current_TIK = pd.read_html(main_link, encoding='cp1251', header=0)[7] num_of_voters.extend(int(current_TIK.iloc[0,i]) for i in range (len(current_TIK.columns))) num_of_voters_voted.extend(int(current_TIK.iloc[2,i]) + int(current_TIK.iloc[3,i]) for i in range (len(current_TIK.columns))) appearence.extend(round((int(current_TIK.iloc[2,i]) + int(current_TIK.iloc[3,i]))/int(current_TIK.iloc[0,i])*100, 2) for i in range (len(current_TIK.columns))) votes_for_Amosov_percent.extend(round(float(current_TIK.iloc[12,i][-6]+current_TIK.iloc[12,i][-5]+current_TIK.iloc[12,i][-4]+current_TIK.iloc[12,i][-3]+current_TIK.iloc[12,i][-2]),2) for i in range (len(current_TIK.columns))) votes_for_Beglov_percent.extend(round(float(current_TIK.iloc[13,i][-6]+current_TIK.iloc[13,i][-5]+current_TIK.iloc[13,i][-4]+current_TIK.iloc[13,i][-3]+current_TIK.iloc[13,i][-2]),2) for i in range (len(current_TIK.columns))) votes_for_Tikhonova_percent.extend(round(float(current_TIK.iloc[14,i][-6]+current_TIK.iloc[14,i][-5]+current_TIK.iloc[14,i][-4]+current_TIK.iloc[14,i][-3]+current_TIK.iloc[14,i][-2]),2) for i in range (len(current_TIK.columns))) 

рддреЛ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереАред Google Colab рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдорд╛рд░реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рдирд╣реАрдВред

рд╡рд┐рднрд┐рдиреНрди рдЧреНрд░рд╛рдлрд╝ рдФрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо "рдбреЗрдЯрд╛рд╕реЗрдЯ" рдХреЛ рдХреНрдпрд╛ рдХрд╣рддреЗ рд╣реИрдВред

рдЪреБрдирд╛рд╡ рдЖрдпреЛрдЧ рдХреЗ рдЖрдВрдХрдбрд╝реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг


рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рд╢рд╣рд░ рдореЗрдВ 30 рдкреНрд░рд╛рджреЗрд╢рд┐рдХ рдЖрдпреЛрдЧ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП, 31 рд╡реЗрдВ рдХреЙрд▓рдо рдореЗрдВ, рд╣рдо рдбрд┐рдЬрд┐рдЯрд▓ рдорддрджрд╛рди рдХреЗрдВрджреНрд░реЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВред

рдЫрд╡рд┐

рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░реАрдп рдЖрдпреЛрдЧ рдореЗрдВ рдХрдИ рджрд░реНрдЬрдиреЛрдВ PECs (рдкреНрд░реАрдЗрдВрд╕реНрдЯреАрдЯреНрдпреВрдЯ рдЗрд▓реЗрдХреНрд╢рди рдХрдореАрд╢рди) рд╣реЛрддреЗ рд╣реИрдВред

рдЫрд╡рд┐

рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд╣рд┐рдд рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдорддрджрд╛рди рдХреЗрдВрджреНрд░ рдкрд░ рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ, рдФрд░ рд╣рдо рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░реВрдВрдЧрд╛:

  • рдорддрджрд╛рди рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рдорддрджрд╛рди рдХреЗрдВрджреНрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛;

  • рдорддрджрд╛рди рдкрд░ рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЗ рд╡реЛрдЯ рдкреНрд░рддрд┐рд╢рдд рдкрд░ рдирд┐рд░реНрднрд░рддрд╛;

  • рдкреВрд░реНрд╡рд╡рд░реНрддреА рдорддрджрд╛рддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдорддрджрд╛рди рдХреА рдирд┐рд░реНрднрд░рддрд╛ред

рдирдВрдЧреЗ рдбреЗрдЯрд╛ рдЯреЗрдмрд▓ рд╕реЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдЪреБрдирд╛рд╡ рдХреИрд╕реЗ рд╣реБрдП рдФрд░ рдХреБрдЫ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реЗ, рдЗрд╕рд▓рд┐рдП рдЪрд╛рд░реНрдЯ рд╣рдорд╛рд░реЗ рд░рд╛рд╕реНрддреЗ рд╣реИрдВред

рд╣рдо рдЬреЛ рд▓реЗрдХрд░ рдЖрдП рдереЗ, рдЙрд╕рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред

 ### Plots Data #Votes in percent (appearence) - no need in extra computations #Appearence (num of voters) - no need in extera computations #Number of UIKs (appearence) interval = 1 interval_num_of_UIKs = [] for i in range (int(100/interval+1/interval)): interval_num_of_UIKs.append(0) for i in range (0, int(100/interval+1/interval), interval): for j in range (len(appearence)): if appearence[j] < (i + interval/2) and appearence[j] >= (i - interval/2): interval_num_of_UIKs[i] = interval_num_of_UIKs[i] + 1 

 ### Plotting #Number of UIKs (appearence) plt.figure(figsize=(10, 6)) plt.plot(interval_num_of_UIKs) plt.axis([0, 100, 0, 200]) plt.ylabel('Number of UIKs in a 1% range') plt.xlabel('Appearence') plt.show() #Votes in percent (appearence) plt.figure(figsize=(10, 10)) plt.scatter(appearence, votes_for_Amosov_percent, c = 'g', s = 6) plt.scatter(appearence, votes_for_Beglov_percent, c = 'b', s = 6) plt.scatter(appearence, votes_for_Tikhonova_percent, c = 'r', s = 6) plt.ylabel('Votes in % for each candidate') plt.xlabel('Appearence') plt.show() #Appearence (num of voters) plt.figure(figsize=(10, 6)) plt.scatter(num_of_voters, appearence, c = 'y', s = 6) plt.ylabel('Appearence') plt.xlabel('Number of voters registereg in UIK') plt.show() 

рдорддрджрд╛рди рдХреЗрдВрджреНрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдорддрджрд╛рди рдХреА рдирд┐рд░реНрднрд░рддрд╛

рдЫрд╡рд┐

рдорддрджрд╛рди рдХреЗ рджрд┐рди рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЗ рд╡реЛрдЯ рдкреНрд░рддрд┐рд╢рдд рдкрд░ рдирд┐рд░реНрднрд░рддрд╛

  • "рдЧреНрд░реАрди" - рдЕрдореЛрд╕реЛрд╡ рдХреЗ рд▓рд┐рдП рд╡реЛрдЯ

  • "рдмреНрд▓реВ" - рдмреЗрдЧрд▓реЛрд╡ рдХреЗ рд▓рд┐рдП

  • "рд░реЗрдб" - рддрд┐рдЦреЛрдиреЛрд╡ рдХреЗ рд▓рд┐рдП

рдЫрд╡рд┐

рдорддрджрд╛рддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдорддрджрд╛рди рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛

рдЫрд╡рд┐

рдирд┐рд░реНрдорд╛рдг рдХрд╛рдлреА рд╕рд╣рдиреАрдп рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕рд╛рдЗрдЯ рдореЗрдВ рдФрд╕рддрди 400 рд▓реЛрдЧ рдФрд░ рдмреЗрдЧрд▓реЛрд╡ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╢рдд 50 рд╕реЗ 70 рд╣реИ, рд▓реЗрдХрд┐рди рджреЛ рд╕рд╛рдЗрдЯреЗрдВ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдЯрд░реНрдирдЖрдЙрдЯ> 1200 рд▓реЛрдЧ рд╣реИрдВ рдФрд░ 90- -0.2 рдкреНрд░рддрд┐рд╢рдд рд╣реИрдВред рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдРрд╕рд╛ рд╣реБрдЖред рдХреНрдпрд╛ рдХреБрдЫ рд╢рд╛рдирджрд╛рд░ рдЖрдВрджреЛрд▓рдирдХрд╛рд░рд┐рдпреЛрдВ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛? рдпрд╛ рд╕рд┐рд░реНрдл 10 рд▓реЛрдЧреЛрдВ рдХреЛ рдмрд╕ рд╕реЗ рдЙрддрд╛рд░рд╛ рдФрд░ рд╡реЛрдЯ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛? рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ, рд╣рдо рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реИрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдЫреЛрдЯреА рдЬрд╛рдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрднреА рднреА рдХрд╛рд░реНрдб рдмрдирд╛рдирд╛ рд╣реИред рдЪрд▓рд┐рдП рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред

рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдФрд░ geopandas рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ


 ### Extra data for visualization: appearence and number of voters by municipal districts current_UIK = pd.read_html(url, encoding='cp1251', header=0)[7] num_of_voters_dist = [] num_of_voters_voted_dist = [] appearence_dist = [] for j in [num_of_voters_dist, num_of_voters_voted_dist, appearence_dist]: j.extend(0 for i in range (18)) districts = { '0' : [1], # '1' : [2], # '2' : [18], # '3' : [16, 30], # '4' : [10, 14, 22], # '5' : [11, 17], # '6' : [4, 25], # '7' : [5, 24], # '8' : [23, 29], # '9' : [9, 12, 28], # '10' : [13], # '11' : [15], # '12' : [21], # '13' : [20], # '14' : [19, 27], # '15' : [3, 7], # '16' : [6, 26], # '17' : [8] # } for i in districts.keys(): for k in range (1, 31): if k in districts[i]: num_of_voters_dist[int(i)]= num_of_voters_dist[int(i)] + int(current_UIK.iloc[0,k-1]) num_of_voters_voted_dist[int(i)] = num_of_voters_voted_dist[int(i)] + int(current_UIK.iloc[2,k-1]) + int(current_UIK.iloc[3,k-1]) for i in range (18): appearence_dist[i] = round(num_of_voters_voted_dist[i]/num_of_voters_dist[i]*100, 2) 

 ### GeoDataFrame SPb_shapes= gpd.read_file('./shapes/Administrative_Discrits.shp', encoding='cp1251') temp = pd.DataFrame({' ': num_of_voters_dist, '':appearence_dist }) temp[''] = SPb_shapes[['']] temp['geometry'] = SPb_shapes[['geometry']] SPB_elections_visualization = gpd.GeoDataFrame(temp) 

 ### Colored districts SPB_elections_visualization.plot(column = '', linewidth=0, cmap='plasma', legend=True, figsize=[15,15]) 



рдЙрдиреНрд╣реЛрдВрдиреЗ рд╢рд╣рд░ рдХреЗ рдкреНрд░рд╢рд╛рд╕рдирд┐рдХ рдЬрд┐рд▓реЛрдВ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдЙрди рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП, рдпрд╣ рдкрд░рд┐рдЪрд┐рдд рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдкреАрдЯрд░ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдиреЗрд╡рд╛ рдЕрднреА рднреА рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред

рдорддрджрд╛рддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛

 ### Number of voters gradient SPB_elections_visualization.plot(column = ' ', linewidth=0, cmap='plasma', legend=True, figsize=[15,15]) 



рджрд┐рдЦрд╛рд╡рдЯ

 ### Appearence gradient SPB_elections_visualization.plot(column = '', linewidth=0, cmap='plasma', legend=True, figsize=[15,15]) 



рдирд┐рд╖реНрдХрд░реНрд╖


рдЖрдк рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдордЬрд╝реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХреБрдЫ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВред рд╕рд░рд▓ рдФрд░ рдкрд░рд┐рд╖реНрдХреГрдд рдЬрд┐рдпреЛрд▓реЛрдХреЗрд╢рди рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЙрдкрдХрд░рдг рдорд╣рд╛рди рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЕрдкрдиреА рд╕рдлрд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреЗрдВ!

Source: https://habr.com/ru/post/hi475258/


All Articles