{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Web-scraping: сбор данных из баз данных и интернет-источников\n", "\n", "*Алла Тамбовцева, НИУ ВШЭ*\n", "\n", "## Немного о функциях и библиотеке `pandas`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Простые функции\n", "\n", "С готовыми функциями в Python мы уже знакомы. Например, мы знаем, что существует функция `print()`, которая принимает на вход что угодно и выводит результат на экран:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5\n" ] } ], "source": [ "print(5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Эта функция может принимать на вход несколько аргументов сразу:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a 5 [4, 6]\n" ] } ], "source": [ "print(\"a\", 5, [4, 6])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Теперь мы посмотрим, как писать свои функции. Напишем функцию `squared()`, которая будет принимать на вход число и возвращать его квадрат. Первая строка функции – сигнатура – состоит из ключевого слова `def`, который сообщает Python, чтобы мы собираемся определить новую функцию, названия функции и её аргументов. Здесь аргумент у нас один – некоторое число, которое мы обозначим за `x`. В конце сигнатуры ставится двоеточие, всё, что после двоеточия – это тело функции, то есть описание того, что эта функция должна делать.\n", "\n", "Наша функция должна возводить полученное на вход число в квадрат и возвращать результат. Этот результат мы поместим после ключевого слова `return`:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# функция\n", "\n", "def squared(x):\n", " return x ** 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Проверим, что функция работает, применим её к числу 3:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "squared(3) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Теперь напишем функцию с двумя аргументами и результатом в виде списка. Пусть это будет функция `just_test()`, которая принимает на вход два числа и возвращает их сумму и разность, оформленные в список:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def just_test(a, b):\n", " res1 = a + b\n", " res2 = a - b\n", " return [res1, res2] " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[8, -2]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "just_test(3, 5) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Всё работает!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Очень краткое введение в датафреймы `pandas`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В Python есть библиотека `pandas`, которая позволяет работать с данными в табличном виде, а также загружать данные из файлов CSV и Excel. Обычно эту библиотеку импортируют с сокращённым названием `pd`:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Попробуем создать датафрейм (таблицу) из списка списков:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "df = pd.DataFrame([[2, 3, 7], \n", " [0, 2, 9]]) " ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012
0237
1029
\n", "
" ], "text/plain": [ " 0 1 2\n", "0 2 3 7\n", "1 0 2 9" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Первый список считался как первая строка таблицы, а второй – как вторая. Смысл один и тот же, но работать с таблицей гораздо привычнее и приятнее. Присвоим названия столбцам (по умолчанию они просто нумеруются целочисленными индексами):" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "df.columns = [\"A\", \"B\", \"C\"] " ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ABC
0237
1029
\n", "
" ], "text/plain": [ " A B C\n", "0 2 3 7\n", "1 0 2 9" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Теперь нашу небольшую табличку мы можем экспортировать в файл CSV или Excel:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "df.to_csv(\"/Users/allat/Desktop/icef/test.csv\")" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "df.to_excel(\"/Users/allat/Desktop/icef/test.xlsx\") " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 2 }