{
"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",
" 0 | \n",
" 1 | \n",
" 2 | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 2 | \n",
" 3 | \n",
" 7 | \n",
"
\n",
" \n",
" | 1 | \n",
" 0 | \n",
" 2 | \n",
" 9 | \n",
"
\n",
" \n",
"
\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",
" A | \n",
" B | \n",
" C | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" 2 | \n",
" 3 | \n",
" 7 | \n",
"
\n",
" \n",
" | 1 | \n",
" 0 | \n",
" 2 | \n",
" 9 | \n",
"
\n",
" \n",
"
\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
}