#!/usr/bin/env python # coding: utf-8 # # Python для сбора и анализа данных # # *Алла Тамбовцева, НИУ ВШЭ* # # *Данный ноутбук частично основан на [лекции](http://python.math-hse.info:8080/github/ischurov/pythonhse/blob/master/Lecture%201.ipynb) Щурова И.В., [курс](http://math-info.hse.ru/s15/m) «Программирование на языке Python для сбора и анализа данных» (НИУ ВШЭ).* # ## Типы переменных и преобразование типов # Типы переменных (не путать с *data types* и *data scales*): # # * числовой c плавающей точкой (*float*); # * целочисленный (*integer*); # * строковый или текстовый (*string*); # * логический или булев (*boolean*): только два значения `True` и `False`. # Посмотрим, как определить тип переменной: # In[1]: x = 2.34 type(x) # функция type # In[2]: y = 2 type(y) # In[3]: r = 'hello' type(r) # In[4]: l = True type(l) # Иногда требуется преобразовать тип переменной, например, из числа с плавающей точкой сделать целое число. Зачем это бывает нужно? Для удобства и для более корректной выдачи результатов. Например, у нас есть база данных по респондентам, в которой указан их год рождения, и мы хотим добавить столбец с возрастом респондентов (числом полных лет). Из-за того, что кто-то ввел год в виде 1993.0, возраст при вычислениях тоже получится числом с плавающей точкой — 25.0. Так как мы знаем, что возраст всегда будет целым, чтобы дробная часть не смущала, можно привести все значения к целочисленному типу. # In[5]: int(25.0) # int - от integer # Вообще функции для изменения типа переменных называются так же, как и сами типы или их сокращённые названия. # In[6]: float(23) # In[7]: str(2) # str - от string # In[8]: int("23") # int - от integer # Однако, если преобразование невозможно, Python выдаст ошибку (а точнее, исключение `ValueError`, про исключения поговорим позже): # In[9]: float('23,56') # Так как запятая в Python не воспринимается как десятичный разделитель (в качестве разделителя используется точка), превратить строку '23,56' в число не получится, нужно будет сначала заменить запятую на точку. Как работать со строками, мы обсудим позже, но если интересно, можно сделать следующее: создать любую строковую переменную, а потом после её названия поставить точку и нажать *Tab*. Так же, как и в случае с модулем `math`, выпадет список всех возможных методов, которые можно применять к строке. # ## Ввод и вывод # ### Ввод информации с клавиатуры # Иногда возникает необходимость запросить какую-нибудь информацию у пользователя — попросить ввести её с клавиатуры. Это может быть нужно, например, когда мы пытаемся имитировать заполнение какой-нибудь формы (собрать информацию и обработать) или написать функцию, которая будет работать по-разному в зависимости от режима ("Если хотите выгрузить данные из файла, нажмите 1, если хотите вводить данные вручную, введите 2"). # # Запросить данные с клавиатуры можно с помощью функции `input()`: # In[10]: input("Введите что-нибудь: ") # Однако обычно нам нужно не просто вывести на экран то, что ввел пользователь (он и сам это видит), но и сохранить введенную информацию. Сделаем это (и заодно перейдем к числам). # In[11]: num = input("Введите какое-нибудь число: ") # Теперь мы можем работать с переменной `num`, в которую мы сохранили результат ввода с клавиатуры. # In[12]: num # Введенное нами число 5 сохранилось. Однако, если посмотреть внимательнее, это не совсем число: число пять стоит в кавычках. Это строка! То есть обычный текст. Проверим: # In[13]: type(num) # действительно # Тут нам как раз и пригодится преобразование типов переменных: # In[14]: num = int(num) num # И теперь всё сразу: правильно и компактно. # In[15]: num = int(input("Введите какое-нибудь число: ")) num # Раз мы не предлагаем пользователю ввести именно целое число, число может быть любым, даже дробным. Учтем это – будем конвертировать введенный текст в число с плавающей точкой. # In[16]: num = float(input("Введите какое-нибудь число: ")) num # С клавиатуры можно вводить сколько угодно объектов: # In[17]: numbers = input("Введите числа через пробел: ") # In[18]: numbers # Только тогда для работы с отдельными элементами ввода потребуется разбить строку на части по какому-нибудь символу (в нашем случае – по пробелу). О разбиении текста на части поговорим позже, когда будем обсуждать работу со строками, а пока разберём вывод информации на экран. # ### Вывод информации на экран # Как мы уже знаем, для вывода чего-либо на экран в Python существует функция `print()`: # In[19]: print(5) print('Hello!') # Для того, чтобы вывести на экран сразу несколько объектов, нужно просто перечислить их через запятую в круглых скобках. # In[20]: age = 23 print('Your age is ', age) # По умолчанию в качестве разделителей (отделяющих объекты друг от друга) используются пробелы. Но при желании это можно поправить, добавив аргумент `sep` (от *separator* – разделитель): # In[21]: print(2, 3, sep='-') # In[22]: print(2, 3, sep='------')