Паша душнит
617 subscribers
83 photos
5 videos
1 file
97 links
По вопросам писать @pavel_ld
Download Telegram
Как подружить Google sheets и Питон
p.s. код дублируется в комменты

Зачем
?
Люблю велосипеды
По работе возник кейс: Есть 20 человек, им надо редактировать ексель файл. Вариантов 3
* У каждого свой ексель. Питоном скачиваем каждый и объедениям. Из минусов сложно вносить какие-то изменения. Нужно быть уверенным, все применят изменения, иначе будет несколько версий таблиц, и не факт что их станкуть получится корректно
* Делать фронт, но понятно это долго и сложно (тут хочу попробовать эту шутку, но пока нет времени)
* Гугл таблица. Минусы: требует согласование с безопасниками. Но плюсы: история, если ктото чтото сломает (а это точно произойдет) можно вернуть работающую версию. И самое крутое личные фильтры

Про pygsheets
Теперь про то, как сделать велосипед обрабатывать гугл таблички питоном. Мы будем работать с pygsheets (есть еще gspred у него больше звезд на гитхабе, но мне кажется возможностей поменьше). Конечно вы можете использовать чистый гугловский апи, но я тупой бизнес-аналитик и там надо разбираться с гугловской документацией (но если вам это интересно то смотри это или это)

Авторизация
Можно использовать сервисный аккаунт (с ютубовской апи такое уже не прокатит). Про то как использовать сервисный акк смотри тут. Там немного старая версия google console, но более менее ничего не помаялось. А вот вместо gc = pygsheets.authorize(client_secret='path'), надо gc = pygsheets.authorize(service_account_file=file_path)

Про неочевидные вещи
1. Пропуски
В целом мы тут ради одной функции
df = wks.get_as_df()
которая считывает лист и делает нам пандасовсикй датафрейм. Дальше вы хотите убрать строки с пропусками. И... Ничего не проходит. Это связано с тем, что по умолчанию пустые значения есть пустые строки. Чтобы это избежать пишем так:
wks.get_as_df(empty_value=np.NaN, value_render="UNFORMATTED_VALUE")

2. Работа с датой.
Как вы могли обратить внимание выше value_render="UNFORMATTED_VALUE". Более подробно см тут. К сожалению по умолчанию стоит FORMATTED_VALUE. И я не очень помню почему, но с ним не получается работать с датой. Дальше вы считываете даты. И.... Ничего не работает вы просто получаете набор цифр. Тут нам поможет библиотка xlrd (которая как раз в привычном нам
pd.read_xlsx()
делает это. Ниже код который превратить столбец с непонятными цифрами в привычный нам даты.
data_google_sheets["work_date"] = data_google_sheets["work_date"].loc[data_google_sheets["work_date"].notnull()].apply(xlrd.xldate_as_datetime, args=(0,))

3. Добавление данных на гугл таблицу.
В моем кейсе требуется только перезаписать таблицу для этого делаем так:
wks = sh.worksheet_by_title("final")
wks.clear()
wks.set_dataframe(df,(1,1))

Тут первое необходимо убедиться, что
* в
clear()
ничего не стоит, если вы там поставите координаты функция будет чувствительная к скрытым строкам
* И нужно проверить, что вам хватить размеров листа, иначе
wks.set_dataframe(df,(1,1))
выдаст ошибку выхода за границу.
* данный код не меняет форматирование (может есть такие параметры я не смотрел), поэтому если есть объеденные ячейки или нарисованные границы и тд, они останутся.

ps Будут вопросы, пишите)

#python #аналитика
В тему питона. Достаточно давно я писал небольшой обзор основ библиотек по анализу данных. Материал немного может устарел. Но писался достаточно для начинающих.

1. Markdown - https://vk.com/co_science?w=wall-179080065_326

2. установка и работа с jupyter - https://vk.com/co_science?w=wall-179080065_356 (хотя я сам сейчас юзаю VSCODE)

3. Numpy (вычисления) - https://vk.com/feed?q=%23science_tools&section=search&w=wall-179080065_404

4. Pandas (работа с таблицами) - https://vk.com/feed?q=%23science_tools&section=search&w=wall-179080065_432

5. Plotly (визуализация) - https://vk.com/feed?q=%23science_tools&section=search&w=wall-179080065_522

#python #аналитика
👍1
Python (pandas) vs SQL
Тут я не буду очень оригинальным и скажу, что без sql быть аналитиком сложно, а вот без знаний pandas вполне можно. Но давайте поймём почему?

1) Большое данные
если у вас не Spark или Modin (или другие апгрейды pandas), то скорей всего ваш код выполняется на одном ядре, и даже не смотря на всякие векторизации и ускорения на больших (1 млн строк и более) данных pandas будет достаточно медленный.
SQL же в компаниях обычно используют MPP системы (Greenplum, click house, vertica). Они специально сделаны для параллельной обработки данных (если не накосячил в запросе), что может дать большой выигрыш в скорости.

2) JOIN
90% работы аналитика это join (merge в pandas). Опять же, обычно в компаниях используют так называемые колончатые базы. Которые как раз запросы типо join выполняют быстро.

2*) JOIN с условием
Отдельная боль для Pandas Если вам нужно сложное условие на ключи:
left join a on (a.1 = b.1 and a.2 != b.2)
Я не очень знаю, как такое сделать в Pandas. В таком случае проще использовать sql, чем pandas.

3) Оконные функции (и группировки). Вообще оконки можно делать в pandas, но честно говоря мне кажется это не так удобно, как в SQL. Аналогично с группировками. Не так давно в pandas появилась функция agg (очень рекомендую), но работа с группами, с тем, что надо делать reset_index, как уж очень наворочено (ну либо я не разобрался).

Поругали Pandas, теперь давайте SQL
3) Функции
Да в sql есть функции, но опять же использовать их не очень приятно. В итоге в SQL приходиться дублировать код.

4) pivot table, сводные таблицы и это все. В питоне делается гораздо проще. В целом за вас это может сделать BI инструменты, но все же. Более подробно про pivot table, cross-table

5) работа с регулярками. Тут без комментариев, если вам нужно написать 10 регулярок, которые чистят данные, то лучше pandas,

Итог. Я сейчас почти для всего использую SQL. Но если нужно чистить данные или сделать pivot table использую pandas.

В следующий серии расскажу, как я ботал pandas, numpy и это все.

#SQL #python #pandas
5👍1
Про python
Сразу скажу, что я говорю про питон для аналитиков, а не разработки.

Первый поинт.
Есть два варианта его ботать:
1) проектный — у вас есть конкретная задача, под неё вы ищите готовые решение. И так становитесь умнее.

2) фундаментальный — вы смотрите какой-то курс, где вам дают много знаний, и что-то однажды вам пригодится.

Немного про плюсы и минусы. Фундаментальный дольше, но и качество знаний (если вы потом их используете) выше. Проектный подход может не дать вам хорошего решения. И вы не будете знать, что можно сделать по другому.

Я сам изучал питон проектным способом. В 11 классе надо было нарисовать графики в Паскале. Я решил что Паскаль мне надоел. И потратил выходные, чтобы сделать это в питоне. Потом делал аналогично на лабораторных работах.

Поинт 2
Есть три уровня познания;
1) вы копируете чужой код не очень понимая, как он работает
2) мы можете скопировать два разных чужих кода и адаптировать их под себя
3) вы понимаете, как что работает и можете написать сами

При проектором подходе, обычно вы остаётесь на 1-2 уровне. Но вам решать какой уровень достаточный. Если вам быстро нужно решить разово задачу, то проще скопировать чужой код.

Поинт 3
Питон для аналитика — клей для библиотек. Распишу, что считаю нужно знать, а что знать желательно.
1) точно нужно знать:
Циклы, условия, функции, работа со строками, датами, случайные числа. Листы (массивы), словарь (хэш таблица). Генераторы массивов и словарей.

2) знать полезно:
Работа с классами. Исключения. Регулярные выражения (не совсем питон, но очень полезно).
Работа с файлами (CSV, json)
Подключение к базе данных

Пойдём теперь по библиотекам
Pandas — святая святых для аналитика.
1) знать важно:
Series(создание, работа с ними)
DataFrame(создание разными способами)
Работа с датами
Работа со строками
Apply
itterrows
pivot-table
Фильтры
Сортировки
Group by (agg)

2) знать полезно:
Работа с группами
Векторизация

3) когда-нибудь заботать
Spark, Modin

Numpy (scipy) — последнее время, я не использую. Но если вам, что-то нужно из Математики, то в них это уже реализовано. Статистика, разные тесты и прочее все есть. Ну и заботайте векторизацию

Визуализация: я с 1 курса полюбил plotly. Напишу про него. Четких пацанов, юзающих Matplot просьба не Хейтить
1) знать нужно
Plotly.express (color, size, trend line)

2) знать полезно
Работа с полной версией, бывает нужно, когда нужно несколько графиков на одном.
Экспорт графиков (в png и html)

3) круто знать
Dash

Парсинг — тут я сам не очень знаю.
Точно надо: beautiful soup
Полезно: Selenium, postman (не питон, но в нем есть классный экспорт запроса в разные языки)

В коментах буду добавлять материалы для бота, так что заглядывайте

#python
👍124
Для любителей питона, sql кстати тоже)), в закрепление прошлого поста

https://www.youtube.com/watch?v=PMoUFANP9bU

#python #sql
❤‍🔥1
Возникла задача нормализации json

И к своему стыду я не знал, что это умеет делать пандас

Так что держите доку и гайд

#python #json #pandas
1