Python для сбора и анализа данных

Алла Тамбовцева, НИУ ВШЭ

Данный ноутбук частично основан на лекции Щурова И.В., курс «Программирование на языке Python для сбора и анализа данных» (НИУ ВШЭ).

Типы переменных и преобразование типов

Типы переменных (не путать с data types и data scales):

  • числовой c плавающей точкой (float);
  • целочисленный (integer);
  • строковый или текстовый (string);
  • логический или булев (boolean): только два значения True и False.

Посмотрим, как определить тип переменной:

In [1]:
x = 2.34
type(x)  # функция type
Out[1]:
float
In [2]:
y = 2
type(y)
Out[2]:
int
In [3]:
r = 'hello'
type(r)
Out[3]:
str
In [4]:
l = True
type(l)
Out[4]:
bool

Иногда требуется преобразовать тип переменной, например, из числа с плавающей точкой сделать целое число. Зачем это бывает нужно? Для удобства и для более корректной выдачи результатов. Например, у нас есть база данных по респондентам, в которой указан их год рождения, и мы хотим добавить столбец с возрастом респондентов (числом полных лет). Из-за того, что кто-то ввел год в виде 1993.0, возраст при вычислениях тоже получится числом с плавающей точкой — 25.0. Так как мы знаем, что возраст всегда будет целым, чтобы дробная часть не смущала, можно привести все значения к целочисленному типу.

In [5]:
int(25.0) # int - от integer
Out[5]:
25

Вообще функции для изменения типа переменных называются так же, как и сами типы или их сокращённые названия.

In [6]:
float(23)
Out[6]:
23.0
In [7]:
str(2) # str - от string
Out[7]:
'2'
In [8]:
int("23")  # int - от integer
Out[8]:
23

Однако, если преобразование невозможно, Python выдаст ошибку (а точнее, исключение ValueError, про исключения поговорим позже):

In [9]:
float('23,56')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-9-b3dd92f20a26> in <module>
----> 1 float('23,56')

ValueError: could not convert string to float: '23,56'

Так как запятая в Python не воспринимается как десятичный разделитель (в качестве разделителя используется точка), превратить строку '23,56' в число не получится, нужно будет сначала заменить запятую на точку. Как работать со строками, мы обсудим позже, но если интересно, можно сделать следующее: создать любую строковую переменную, а потом после её названия поставить точку и нажать Tab. Так же, как и в случае с модулем math, выпадет список всех возможных методов, которые можно применять к строке.

Ввод и вывод

Ввод информации с клавиатуры

Иногда возникает необходимость запросить какую-нибудь информацию у пользователя — попросить ввести её с клавиатуры. Это может быть нужно, например, когда мы пытаемся имитировать заполнение какой-нибудь формы (собрать информацию и обработать) или написать функцию, которая будет работать по-разному в зависимости от режима ("Если хотите выгрузить данные из файла, нажмите 1, если хотите вводить данные вручную, введите 2").

Запросить данные с клавиатуры можно с помощью функции input():

In [10]:
input("Введите что-нибудь: ")
Введите что-нибудь: нечто
Out[10]:
'нечто'

Однако обычно нам нужно не просто вывести на экран то, что ввел пользователь (он и сам это видит), но и сохранить введенную информацию. Сделаем это (и заодно перейдем к числам).

In [11]:
num = input("Введите какое-нибудь число: ")
Введите какое-нибудь число: 5

Теперь мы можем работать с переменной num, в которую мы сохранили результат ввода с клавиатуры.

In [12]:
num
Out[12]:
'5'

Введенное нами число 5 сохранилось. Однако, если посмотреть внимательнее, это не совсем число: число пять стоит в кавычках. Это строка! То есть обычный текст. Проверим:

In [13]:
type(num) # действительно
Out[13]:
str

Тут нам как раз и пригодится преобразование типов переменных:

In [14]:
num = int(num)
num
Out[14]:
5

И теперь всё сразу: правильно и компактно.

In [15]:
num = int(input("Введите какое-нибудь число: "))
num
Введите какое-нибудь число: 7
Out[15]:
7

Раз мы не предлагаем пользователю ввести именно целое число, число может быть любым, даже дробным. Учтем это – будем конвертировать введенный текст в число с плавающей точкой.

In [16]:
num = float(input("Введите какое-нибудь число: "))
num
Введите какое-нибудь число: 7.5
Out[16]:
7.5

С клавиатуры можно вводить сколько угодно объектов:

In [17]:
numbers = input("Введите числа через пробел: ")
Введите числа через пробел: 2 3
In [18]:
numbers
Out[18]:
'2 3'

Только тогда для работы с отдельными элементами ввода потребуется разбить строку на части по какому-нибудь символу (в нашем случае – по пробелу). О разбиении текста на части поговорим позже, когда будем обсуждать работу со строками, а пока разберём вывод информации на экран.

Вывод информации на экран

Как мы уже знаем, для вывода чего-либо на экран в Python существует функция print():

In [19]:
print(5)
print('Hello!')
5
Hello!

Для того, чтобы вывести на экран сразу несколько объектов, нужно просто перечислить их через запятую в круглых скобках.

In [20]:
age = 23
print('Your age is ', age)
Your age is  23

По умолчанию в качестве разделителей (отделяющих объекты друг от друга) используются пробелы. Но при желании это можно поправить, добавив аргумент sep (от separator – разделитель):

In [21]:
print(2, 3, sep='-')
2-3
In [22]:
print(2, 3, sep='------')
2------3