Size: a a a

Python для анализа данных

2019 October 08

OA

Oleg Agapov in Python для анализа данных
а, я кажется понял
источник

OA

Oleg Agapov in Python для анализа данных
хотя не очень понял( этот дамп можно из питона сделать?
источник

D

Daria Alexeenko in Python для анализа данных
Oleg Agapov
хотя не очень понял( этот дамп можно из питона сделать?
нужно попросить админов бд сделать дамп той таблички, которая нужна
https://dba.stackexchange.com/questions/90482/export-postgres-table-as-json
https://stackoverflow.com/questions/31680518/exporting-data-from-postgres-to-json-and-renaming-the-columns-of-the-fly
а дальше вот как-то так (но у меня пример с jsonl):
d = {}
with jsonlines.open(‘data.jsonl') as reader:
       for obj in reader:
           key = obj.get('url')
           value = obj.get('title')
           d[key] = value
df= pd.DataFrame(data=d.items())
- в цикл можно добавить итерацию по ключам в твоем первом датафрейме и делать obj.get(i) (i - это переменная c твоими ключами из df1)
источник

OA

Oleg Agapov in Python для анализа данных
ок, ясно. спасибо за идею @alexeedaria
источник

АГ

Артем Гилетич... in Python для анализа данных
Oleg Agapov
Столкнулся с интересной задачей, когда Jupyter падает от недостатка памяти.
В общем, есть два запроса к mysql. Первый достает список пользователей из одной базы, второй достает данные по этим позьзователям из другой базы.
Первый запрос достает около 100к строк (небольшой дф). А потом начинается веселуха, т.к. на каждого юзера в среднем 2-3К записей из второй базы. Я сделал выгрузку чанками, более-менее отпимизировал их кол-во (чтобы не слишком много, но и не по 10 штук вытаскивать). Так вот во время выгрузки второго запроса kernel падает по памяти. На машине всего 8 гиг оперативы.
Как можно было бы оптимизировать это? По идее можно как-то промежуточные результаты кешировать где-то, но может кто уже решал такое.
Для меня в таких случаях работает следующий способ:
Извлекаю данные из БД, итерируясь по датам
pd.read_sql(query.format(date=target_date), con=engine, ...)
и сохраняю каждый файл в отдельный pickle.
Пока грузятся все даты, можно в другом ноутбуке так же последовательно обрабатывать/агрегировать уже сохраненные pickle-файлы.
Правда, работать такой способ будет только тогда, когда есть возможность агрегировать в пределах даты/клиента/чанка клиентов.
источник

Е

Евгений in Python для анализа данных
Привет! Кто-нибудь знает как передать csv файл из Jupyter в clickhouse, чтобы потом использовать данные из него для дальнейших фильтраций?
источник

OA

Oleg Agapov in Python для анализа данных
Артем Гилетич
Для меня в таких случаях работает следующий способ:
Извлекаю данные из БД, итерируясь по датам
pd.read_sql(query.format(date=target_date), con=engine, ...)
и сохраняю каждый файл в отдельный pickle.
Пока грузятся все даты, можно в другом ноутбуке так же последовательно обрабатывать/агрегировать уже сохраненные pickle-файлы.
Правда, работать такой способ будет только тогда, когда есть возможность агрегировать в пределах даты/клиента/чанка клиентов.
Спасибо, я примерно так и решил. только сохранял в csv
источник

НК

Николай Курдюбов... in Python для анализа данных
Всем привет. Подскажите, как получить из датафрейма вида:
есть датафрейм
df = pd.DataFrame(np.array([[1,2,3], [4,5,6], [7,8,9], [1,2,3]]), columns=['a', 'b', 'c'])
И он выглядит так.
Как я могу получить сгруппированный датафрейм по столбцу 'а',
чтобы у меня получилось следующее
источник

НК

Николай Курдюбов... in Python для анализа данных
a  |  values
1      [2,3], [2,3]
4      [5,6]
7      [8,9]
источник

НК

Николай Курдюбов... in Python для анализа данных
то есть уникальное значение 'a' один раз, а в другой колонке списки, которые получились из строк, соответствующих значениям 'a'
источник

АМ

Алексей Макаров... in Python для анализа данных
Николай Курдюбов
Всем привет. Подскажите, как получить из датафрейма вида:
есть датафрейм
df = pd.DataFrame(np.array([[1,2,3], [4,5,6], [7,8,9], [1,2,3]]), columns=['a', 'b', 'c'])
И он выглядит так.
Как я могу получить сгруппированный датафрейм по столбцу 'а',
чтобы у меня получилось следующее
df.groupby('a').apply(lambda x: x[['b','c']].values)
источник

НК

Николай Курдюбов... in Python для анализа данных
Алексей Макаров
df.groupby('a').apply(lambda x: x[['b','c']].values)
Спасибо!
источник

АМ

Алексей Макаров... in Python для анализа данных
Если нужен не series, а датафрейм на выходе, то просто вызвать к получившейся конструкции метод .to_frame()
источник

ЕД

Евгений Доронин... in Python для анализа данных
Евгений
Привет! Кто-нибудь знает как передать csv файл из Jupyter в clickhouse, чтобы потом использовать данные из него для дальнейших фильтраций?
Через внешние таблицы.
Если не забуду, скину завтра. Или в ЛС напомните пример
источник

НК

Николай Курдюбов... in Python для анализа данных
@ax_makarov а можете немного объяснить, если не трудно?
я пытался сначала сделать новый столбец df['values'] = [df['b'], df['c']] и уже обламывался на этом этапе, так и не понял, что было неправильно
источник

Е

Евгений in Python для анализа данных
Евгений Доронин
Через внешние таблицы.
Если не забуду, скину завтра. Или в ЛС напомните пример
буду премного благодарен! Напишу в личку
источник

АМ

Алексей Макаров... in Python для анализа данных
Николай Курдюбов
@ax_makarov а можете немного объяснить, если не трудно?
я пытался сначала сделать новый столбец df['values'] = [df['b'], df['c']] и уже обламывался на этом этапе, так и не понял, что было неправильно
Когда вы создаете [df['b'], df['c']], то тем самым делаете просто одномерный список из двух Series.
источник

АМ

Алексей Макаров... in Python для анализа данных
источник

АМ

Алексей Макаров... in Python для анализа данных
Чтобы создать колонку, в которой был бы список элементов из колонки b и c, можно поступить вот так: df.apply(lambda x: [x['b'],x['c']],axis=1)
источник

АМ

Алексей Макаров... in Python для анализа данных
Ну и потом уже сделать groupby со сворачиванием в список
источник