Визуализировать пандемию коронавируса

В ходе моей работы была выполнена визуализация распространения коронавирусной инфекции. Что же такое визуализация ? Визуализация - это процесс графического отображения сложных процессов (в данном случае построения) на экране компьютера в виде графических примитивов (графических фигур).

Визуализация данных это наиболее эффективный метод иллюстрации и объяснения сложной информации, особенно числовых данных, в простой и удобоваримой форме. Кроме того, при грамотном исполнении, инфографика при интерпретации данных позволяет уменьшить или смягчить систематические ошибки. Один из заслуживающих особого внимания видов визуализации — анимированные фоновые картограммы или хороплеты. И в данной статье мы, используя эти виды, визуализируем пандемию коронавируса, что на данный момент очень актуально.

Но прежде чем начать, давайте разберем определения. Фоновая картограмма или хороплет — это тип тематической карты, на которой области или регионы заштрихованы пропорционально и в соответствии со значением заданного измерения данных.

Статические хороплеты наиболее полезны, когда надо сравнить какие то показатели по регионам. Например, сравнить уровень преступности в данный момент в каждом субъекте Российской Федерации, что можно визуализировать с помощью статической фоновой картограммы.

Анимированная или динамическая фоновая картограмма похожа на статическую, за исключением того, что добавляется время. Это третье измерение делает визуализацию исключительно интересной и мощной.

Код:

#Статический хороплет


# Импорт библиотек
import numpy as np
import pandas as pd
import plotly as py
import plotly.express as px
import plotly.graph_objs as go
from plotly.subplots import make_subplots
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot

# Чтение данных
df = pd.read_csv("data/covid_19_data.csv")

# Переименуем колонки
df = df.rename(columns={'Country/Region':'Страна'})
df = df.rename(columns={'ObservationDate':'Дата'})
df = df.rename(columns={'Confirmed':'Подтверждено'})

# Манипуляции с оригиналом Dataframe
df_countries = df.groupby(['Страна', 'Дата']).sum().reset_index().sort_values('Дата', ascending=False)
df_countries = df_countries.drop_duplicates(subset = ['Страна'])
df_countries = df_countries[df_countries['Подтверждено']>0]

# Создание фоновой картограммы
fig = go.Figure(data=go.Choropleth(
    locations = df_countries['Страна'],
    locationmode = 'country names',
    z = df_countries['Подтверждено'],
    colorscale = 'Reds',
    marker_line_color = 'black',
    marker_line_width = 0.5,
))
fig.update_layout(
    title_text = 'Подтверждённые заболевания 28 марта 2020',
    title_x = 0.5,
    geo=dict(
        showframe = False,
        showcoastlines = False,
        projection_type = 'equirectangular'
    )
)

fig.write_html('Static_choroplete.html', auto_open=True)

Здесь, мы импортируем установленные ранее библиотеки, после читаем csv файл из которого будем брать данные, указывая при этом его местонахождение и название. Далее, переименовываем колонки для удобного восприятия и проводим некоторые манипуляции с оригиналом Dataframe: группировки и возвращения ряда с удаленными повторяющимися значениями. После создаем фоновую картограмму и последней командой мы указываем на создание и запуск html файла, содержащий наши данные. Результат представлен ниже:

Сейчас Вы увидите, насколько по сравнению со статической более эффектна и интересна анимированная фоновая картограмма. Здесь мы смотрим на общее количество подтвержденных случаев коронавируса по странам во времени. И Вы можете видеть, что до недавнего времени больше всего заболевших было в Китае.

Ниже вы можете увидеть код:

#Анимированная фоновая картограмма

# Импорт библиотек
import numpy as np
import pandas as pd
import plotly as py
import plotly.express as px
import plotly.graph_objs as go
from plotly.subplots import make_subplots
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot

# Чтение данных
df = pd.read_csv("data/covid_19_data.csv")

# Переименуем колонки
df = df.rename(columns={'Country/Region': 'Страна'})
df = df.rename(columns={'ObservationDate': 'Дата'})
df = df.rename(columns={'Confirmed': 'Подтверждено'})

# Манипуляции с оригиналом Dataframe
df_countrydate = df[df['Подтверждено'] > 0]
df_countrydate = df_countrydate.groupby(['Дата', 'Страна']).sum().reset_index()
df_countrydate

# Создание фоновой картограммы
fig = px.choropleth(df_countrydate,
                    locations="Страна",
                    locationmode="country names",
                    color="Подтверждено",
                    hover_name="Страна",
                    animation_frame="Дата"
                    )
fig.update_layout(
    title_text='Глобальное распространение короновируса',
    title_x=0.5,
    geo=dict(
        showframe=False,
        showcoastlines=False,
    ))

fig.write_html('Animated_background_cartogram.html', auto_open=True)

Использование фреймворка Flask для реализации web-приложений

Flask — фреймворк для создания веб-приложений на языке программирования Python, использующий набор инструментов Werkzeug, а также шаблонизатор Jinja2. Относится к категории так называемых микрофреймворков[en] — минималистичных каркасов веб-приложений, сознательно предоставляющих лишь самые базовые возможности.
Поддерживается установка посредством пакетного менеджера PyPI, версия 1.0 совместима с Python 2.7, Python 3.3 и выше.
Создатель и основной автор — австрийский программист Армин Ронахер, начал работу над проектом в 2010 году.

Код первого приложения:

from markupsafe import escape
from flask import Flask, abort

app = Flask(__name__)


@app.route('/')
@app.route('/index/')
def hello():
    return '<h1>Hello, World!</h1>'


@app.route('/about/')
def about():
    return '<h3>This is a Flask web application.</h3>'

@app.route('/capitalize/<word>/')
def capitalize(word):
    return '<h1>{}</h1>'.format(escape(word.capitalize()))

@app.route('/add/<int:n1>/<int:n2>/')
def add(n1, n2):
    return '<h1>{}</h1>'.format(n1 + n2)

@app.route('/users/<int:user_id>/')
def greet_user(user_id):
    users = ['Bob', 'Jane', 'Adam']
    try:
        return '<h2>Hi {}</h2>'.format(users[user_id])
    except IndexError:
        abort(404)

Код использования шаблона:

import datetime
from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def hello():
    return render_template('index.html', utc_dt=datetime.datetime.utcnow())

@app.route('/about/')
def about():
    return render_template('about.html')

@app.route('/comments/')
def comments():
    comments = ['This is the first comment.',
                'This is the second comment.',
                'This is the third comment.',
                'This is the fourth comment.'
                ]

    return render_template('comments.html', comments=comments)

Сканер поддоменов на Python

Сканер поддоменов на Python
Обнаружение поддоменов определенного веб-сайта позволяет изучить всю его доменную инфраструктуру. Что это вообще такое? Домен — это адрес сайта в интернете, а поддомен — это домен, который является частью домена более высокого уровня. Для более лучшего понимания, например, у нас есть квартира, которую хозяин, после заселения, решил разделить на отдельные зоны. (для сна, отдыха, питания и так далее) И вся квартира будет выступать у нас в качестве домена, а эти функциональные зоны – поддомены. Если искать их вручную, то на это уйдет целая вечность. Но к счастью, можно написать программу на Python, которая будет делать это за нас, используя метод полного перебора, суть которого состоит в проверке всех общих имен поддоменов конкретного домена, всякий раз, когда мы получаем ответ от сервера, то есть - индикатор того, что поддомен жив. И в данной работе, я исследую сайт GitHub.

Первым делом, нам понадобится установить библиотеку requests, с помощью команды: pip3 install requests, после чего написать код, в котором мы ее импортируем и указываем домен для поиска поддоменов:

import requests
# домен для поиска поддоменов
domain = "github.com"
Далее, я использовал текстовый файл “subdomains-1000.txt”, содержащий список из 1000 поддоменов, наличие которых мы хотим проверить. Его я закинул в папку с моим проектом, после чего был написан следующий код:

# читать все поддомены
file = open("subdomains-1000.txt")
# прочитать весь контент
content = file.read()
# разделить на новые строки
subdomains = content.splitlines()
# список обнаруженных поддоменов
discovered_subdomains = []
for subdomain in subdomains:
# создать URL
url = f"http://{subdomain}.{domain}"
try:
# если возникает ОШИБКА, значит, субдомен не существует
requests.get(url)
except requests.ConnectionError:
# если поддомена не существует, просто передать, ничего не выводить
pass
else:
print("[+] Обнаружен поддомен:", url)
# добавляем обнаруженный поддомен в наш список
discovered_subdomains.append(url)
В нем мы создаем URL-адрес, подходящий для отправки запроса, затем мы используем функцию requests.get() для получения HTTP-ответа от сервера, что вызовает исключение ConnectionError всякий раз, когда сервер не отвечает, поэтому мы обернули это в блоке try/except. Если же исключение не возникло, значит субдомен существует. Запишем все обнаруженные поддомены в файл:

# сохраняем обнаруженные поддомены в файл
with open("discovered_subdomains.txt", "w") as f:
for subdomain in discovered_subdomains:
print(subdomain, file=f)
Как только процесс поиска будет завершен, вы увидите новый файл discover_subdomains.txt, который включает все обнаруженные поддомены.

Рецензия на статью Flask by Example

Автор статьи : Кузнецова Полина Александровна
Статья освещает настройку Redis на Heroku и запуск веб-процесса, а так же рабочего процесса на одном dyno, обновляя промежуточную среду с помощью функции подсчета слов.
Перевод статьи выполнен качественно, без каких-либо замечаний. Все разделы статьи логически взаимосвязаны, а положения статьи подтверждены рабочими примерами кодов и ссылками на научные исследования. В ходе прочтения смысловых и грамматических ошибок не обнаружено. Ссылка на оригинальную статью есть. Имеется также правильное и приятное для чтения оформление самого перевода, где в самом начале идет название темы, а после оглавление, в котором отображается содержание статьи с ссылками на эти пункты. Само оформление кодов реализовано очень удобно для читателя: они заметны, их сразу видно в статье; имеется возможность копирования всего кода сразу; возможность открыть код в новом окне браузера. Все коды в переводе объяснены, а их отдельно взятые элементы выделены в тексте жирным шрифтом. Полина выполнила работу в необходимом объеме и в указанные сроки. Порекомендовал бы поставить оценку “отлично”.

Списки и кортежи в Python

Списки и кортежи являются самыми универсальными и полезными типами данных  в Python. Вы найдете их практически в каждой нетривиальной программе Python.
Читать далее «Списки и кортежи в Python»

Framework Muffin

Что такое Фреймворк?

В своем простейшем виде фронтенд фреймворк – это просто полезная коллекция компонентов CSS, HTML и JavaScript, которые могут быть использованы в наших с Вами проектах. Некоторые из них будут супер легкими с минимальным набором компонентов, другие будут потяжелее, но с полным комплектом мыслимых и немыслимых компонентов. Конечно, выбор будет зависеть от размера и типа проекта. Поэтому выбирайте с умом!

Muffin

По сути, это не фреймворк, Muffin – сосредоточенный на дизайне веб-шаблон фронтенда для рeйтинга статических сайтов с помощью SASS and Jekyll. Muffin использует общие методы Bootstrap, Boilerplate, inuit.css и других библиотек, для чтобы Вам было приятней писать код !

Cравнение Muffin c другими Фреймворками!

Для того, чтобы сделать выводы о популярности этого фреймворка, было принято решение создать сравнительную таблицу, расположенную ниже.Muffin, был сравнен с такими фреймворками как – Jango и CherryPy по следующим критериям:
Группа фреймворков: Full stack или Micro-framework.
Звёзды Github: общее количество звезд проекта, выставленных пользователям.
Релизы Github: количество релизов каждого проекта, что отражает активность работы над проектом и его зрелость.
Fork-и Github: количество, сделанных копий каждого проекта, что показывает популярность использования проекта в собственных работах.
Вопросы Stack-overflow: количество вопросов, заданных по определенной теме.
Вакансии: количество вакансий, связанных с технологиями или ИТ компетенциями.

Название фреймворка Группа фреймворка Звезды на Github Релизы на Github Fork-и на Github Вопросы на stackoverflow Вакансии
Muffin Asyncio 874 216 615 4639 2
Django Full 46 528 275 20 400 217 300 679
CherryPy Micro 1 130 127 279 1 300 3

Вывод:

Я сделал вывод из проделанной работы! Можно с уверенностью сказать что Muffin не пользуется обширной популярностью,к сожалению! Но если вам хочется как можно приятнее писать код , то Muffin вам обязательно поможет!

 

Курсовая работа часть 1

Структура

  • В данной части курсовой работы была написана программа, которая определяет эффективность трех алгоритмов сортировки (Сортировка включением, Обменная сортировка, Сортировка выбором). Каждый алгоритм сортировки оформлен в виде функции, которые подключены к основной программе.
  • Проведено 9 опытов (3 метода х 3 реализации одномерного массива), в каждом из которых определено два числа (С - Количество сравнений М - Количество перемещений), но в третьем случае, случайного массива, в отличие от двух первых, сравнительный анализ алгоритмов возможен только по средним значениям. Для этого проведено серия опытов, желательно, 1500 для каждого алгоритма.

Итоги

  • Исходя из проделанной работы можно сделать вывод. Самым эффективным методом сортировки для массива является метод "Select"

Яндекс.Диск

Задача №63

Даны число P и число H. Определить сумму чисел меньше P, произведение чисел больше H и количество чисел в диапазоне значений P и H. При вводе числа равного P или H, закончить работу.

63

Результат исполнения кода:

Задача №61

Последовательно вводятся числа. Определить сумму чисел с нечётными номерами и произведение чисел с чётными номерами (по порядку ввода). Подсчитать количество слагаемых и количество сомножителей. При вводе числа 55555 закончить работу.

61

Результат исполнения кода:

Задача №60

Заданы M строк символов, которые вводятся с клавиатуры. Каждая строка представляет собой последовательность символов, включающих в себя вопросительные знаки. Заменить в каждой строке все имеющиеся вопросительные знаки звёздочками.

60

Результат исполнения кода: