Копипастим в последнюю ячейку одну из трех таблиц из текстового файла, редактируем таблицу вручную. Потом загружаем содержание ячейки в DataFrame, добавляем столбец даты, убираем из столбцов символы '%" , заменяем '(' на '-'сохраняем все в 'eng_car_sales_in_feubrary_2015.csv'.
.isin .str.contains .str.replace('[().]', '')
В iPython мои (черновики) упражнения с Python, в разделе "Mining" собраны материалы по R, Rapid Miner, Weka, Gate..., в "Projects" фрагменты старых и заготовки для новых исследований... записано для себя, открыто для всех...
среда, 29 апреля 2015 г.
Шаблон Pandas для очистки второй таблицы после копипаста из текстового AEB
вторник, 28 апреля 2015 г.
Пытаемся упростить обработку файлов pdf AEB, но находим новые ошибки
Если скачивать отчеты AEB о продажах автомобилей каждый месяц, то как лучше вытаскивать 3 таблицы из pdf-файла? Сначала вызвать конвертер pdftotext при помощи subprocss, конвертировать и сохранить в текстовый файл, потом из него скопипастить все таблицы в отдельные ячейки. Исправить ручками все ошибки в таблицах, и только после этого привести таблицы к единому формату с помощью Pandas. И я все сделал для первой таблицы февраля 2015г., но вторая и третья таблицы пришли с ошибками, чтобы их понять пришлось их сравнивать со скриншотами оригинальных таблиц и вариантом копипаста прямо из pdf-файла. Итак, я здесь начал со ссылок на subprocss, потом "вспомнил" .str.
пятница, 24 апреля 2015 г.
Ручная сборка tab3 aerbu за 2014г..., штопаем носки с разными формами дырок
Порядок сборкм апрель+(май-июнь)+(июль-декабрь)+(февраль-март)+январь. Каждая группа файлов отличается от остальных количеством или порядком столбцов. Алгоритм действий: есть датафрейм pdall, в который по очереди добавляются датафреймы pdtemp или pdtemp_app (для группы файлов).
Каждый временный pdtemp_app сначала собирается из подобных файлов, а потом туда добавляются (при необходимости) дополнительные столбцы, переименовываются, изменяется порядок столбцов в соответствии с pdall.
В итоге получаем датафрейм за 2014г. и декабрь 2013, в котором потеряно 4 строки, а некоторые столбцы еще предстоит почистить и привести к числовым форматам. В конце поста распечатан итоговый csv файл.
вторник, 21 апреля 2015 г.
Работа с временными файлами в Pandas - ну... не нравится мне все это
Сначала я решил попрактиковаться с методом pd.to_csv. Это часть типовой задачки: открывать разные файлы в pd.read_table, потом приводить их к одному формату и добавлять в один сборный файл. Но в процессе работы решил освоить tempfile.TemporaryFile() - впечатление двойственное..., наверное из-за необходимости использовать .seek(0). Кроме того, в процессе поисков я обнаружил чудесную документацию к Beautiful Soup, зря я не снисходел до нее ранее. А начинается с пост с раууждений о неправильной "постановке задачи".
суббота, 18 апреля 2015 г.
Учимся фильтровать строки DataFrame (pandas) .str.contains()
Чтобы научиться фильтровать строки по условиям вида [pd1[column1] > 100], [pd1['col2'].isin(model_list)], [pd1['Datem'].str.contains('^3.+')], pd1.dropna(subset = ['n1_y', 'Brandt', 'Model'])[10:15] нужно знать форматы столбцов и помнить, что .str.contains() выдает ошибку, если в столбце есть пропущенные значения (NaN) Здесь я сначал хотел попрактиковать регулярные врважения, но оказалось, что подводные камни .str.contains заняли почти весь пост...
пятница, 17 апреля 2015 г.
Попытка доисследовать, чем же отличаются файлы в aerbu_2014_all_csv/3aug2/ приостановлена
Здесь я начал было вручную импортировать файлы в объекты DataFrame (Pandas), но пост разросся из-за того, что пришлось пробовать все подряд: последовательность обработки файлов (начнем с апреля-мая), анализ содержания файлов (структура столбцов), опции для метода pd.read_csv, регулярные выражения. Слишком много разных тем для одного поста. Потому решил остановиться, чтобы в следующих постах освоить простые методы для работы со столбцами. Здесь же неплохой вариант подготовки к пофайловой обработке csv-таблиц. Так что вернемся к этому посту позже.
четверг, 16 апреля 2015 г.
Пойди туда не знаю - куда... pandas.dtypes[0].name - страдания "чайника"
Здесь я начал с процесса сравнения файлов в папке (обнаружил, что их два вида), потом я попытался найти методы для того, чтобы рассортировать файлы по (сочетанию) типам столбцов. Обнаружил еще один "подвид" (отрицательные числа в скобках). В процессе поиска я пришел к выводу, что надо фильтровать не по типам, а по регулярным выражениям ... но этот черновик получился довольно длинным, потому экзерсисы с регулярными выражениями в следующим файле. Много времени ущло на поиск команд. Найдены всего лишь: (pdtemp.dtypes[0].name == 'int64'), pdtemp.columns = colnames_3_0-12, ** А начинается пост с констатации методических ошибок...
среда, 15 апреля 2015 г.
Методы Pandas для работы со столбцами
Когда начинаешь использовать DataFrame, то возникают десятки "мелких вопросов. Как переименовать столбцы? Как изменить порядок столбцов (чтобы склеить таблицы)? Как фильтровать строки по содержанию ячеек? Как использовать для этого регулярные выражения? Типы столбцов? Вот пример команды для извлечения списка столбцов: "cols = list(df.columns.values) StringIO
Здесь есть и такие фишки, как команды считывание в DataFrame из буфера обмена, из ячейки Ipython ... И это приводит к размышлениям о том, что иногда проще скопипастить фрагмент прямо сюда в Notebook
суббота, 11 апреля 2015 г.
Сводим все три промежуточных файла в один 2014_all.csv
Здесь перехожу в папку с тремя файлами (2014.csv, 2014_2_3.txt, 2014_1.txt) /media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv_new/ и пытаюсь все собрать в один файл.
Неудачный шаблон (3) конкатенции... поскольку влетаем в чересполосицу "третьих" таблиц из файлов aerbu
"Третьи таблицы" - это таблицы, в которых приведены 25 самых продаваемых марок автомобилей. В 2014 году формат таблиц поменяли в июле. Открываешь папку, там имена всех файлов имеют одинаковый префикс, естественно, хочется запихнуть в DataFran (pdall) все файлы сразу. Но при распечатывании фрагментов padll обнаруживается "перемешивание столбцов". Здесь я "нашел" способ распечатать фрагменты из каждого файла. И понимаешь, что надо контролировать содержимое каждого файла перед загрузкой (в редакторе, хе-хе...). Потом понимаешь, что прежде, чем писать (предварительный прсмотр) загрузчик надо бы понять, как это нужно делать именно с Pandas... Польза от поста: можно понять, как до меня доходила простая идея о том, что можно сначала все просто загрузить в один фрейм, а потом из него фильтровать одинаковые форматы...
пятница, 10 апреля 2015 г.
Подгоняем таблицу_1 за январь 2014 к формату шаблона и сохраняем с новым порядком столбцов
В процессе работы выяснилось, что шаблон слишком громоздкий. Здесь я попробовал не копировать предыдущий вариант шаблона, а копипастить отдельный ячейки. Здесь при считывании файла пришлось пропускать первую строку, а при записи менять порядок столбцов. Кроме того, здесь столбцы "нарастающим итогом с начала года" изначально отсутствовали, при вставке нулей, три столбца '2014y', '2013y', '1413y' записались в формате Int, посмотрим в следующих постах, как они "concatent" c float
Продолжаем пробовать шаблон (1) конкатенции таблиц (Pandas) с данными aerbu февраля и марта 2014
В предыдущем посте мы создали файл, в котором склеены только девять месяцев 2014 года. А первых трех другой формат.
Здесь я попробовал тот же шаблон для февраля и марта.
Объект DataFrame (pdall) сформировался с ошибкамии -в столбцы попали данные разных форматов из-за ошибки парсера в строке *"Mercedes-Benz Vans","771","473","63%","459","279","65%",
** Потому этот подход показался неудобным, как и сам шаблон.
Сначала "ставим задачу", потом последовательно выполняем в итераторе импорт файлов со столбцами "Brandt 2014y 2013y 1413y 2014m 2013m 1413m Datem", добавляем столбец, читстим и преобразуем два столбца object в Float64, преобразуем строки в даты... Сохраняем все на диск и в инфо-файл.
четверг, 9 апреля 2015 г.
Первый вариант методики очистки и шаблона(1) конкатенции таблиц с Pandas
Файлы таблиц могут иметь разное число столбцов, столбцы разное форматирование, если использовать DataFrame Pandas, то эти задачки решаются очень просто. Здеся я попытался использовать возможности Notebook, PDB, чтобы совместить выполнение кода, тестирование, документирование, логирование...
Сначала "ставим задачу", потом последовательно выполняем в итераторе импорт файлов со столбцами "Brandt 2014y 2013y 1413y 2014m 2013m 1413m Datem", добавляем столбец, читстим и преобразуем два столбца object в Float64, преобразуем строки в даты... Сохраняем все на диск и в инфо-файл.
среда, 8 апреля 2015 г.
Продолжаем разбираться с прожорливым кэшем Chromium -> disk_cache.h -> WebKit -> MemoryCache class
Как работает кэш броузера Chrome? Эта навязчивая идея заставляет меня раз в два месяца копаться в настройках браузера. Вчера вечером я так увлекся, что сегодня потратил еще полдня на конспектирование документации chromium.org/developers, trac.webkit.org/wiki/MemoryCache. Здесь более десятка ссылок, схема файлов кэша, сэема класса MemoryCache... Начал с перевода с китайского, который слегка сбил с толку... но надеюсь что найду все в "сырцах" описанияй классов ... Defines the public interface of the disk cache.
вторник, 7 апреля 2015 г.
Первый рабочий пример конкатенции таблиц с преобразованием форматов столбцов object -> float
Файлы таблиц "Brandt 2014y 2013y 1413y 2014m 2013m 1413m Datem" Визуальный тест pandasd.read_csv - как распечатать все файлы из папки при помощи PDB. Считать данные в кавычках, с разделителями разрядов, привести все пропуски данных к единому виду - Nan, перевести строку в число...
Не уверен, что это лучший варинат, но пока не знаю, как поступить иначе при таком уровне неопределенности. Формат исходных (ежемесячные данные) файлов менялся за год несколько раз. Там то появлялись запятые вместо пробелов - разделителей разрядов, то менялось количество столбцов... Пришлось парсеры перенастраивать и менять...
Файлы короткие, распечатаю ка я их все за год и дело с концом... Нет, не так все просто, надо куда-то сохранить полученный файл...
понедельник, 6 апреля 2015 г.
Проект соглашения с самим собой об обработки файлов таблиц AEBto3tables
Пример того, как я пришел к простым правилам обработки спарсенных таблиц. Техника определяет тактику (мое теннисное убеждение), и правила также нельяз написать без учета инструментов, которые используются для обработки.
Я недавно "запал" на Pandas. И только вчера подобрал и попробовал методы для чистки таблиц. Т.е., я еще не освоил "технику" настолько, чтобы не думать о ней, но сосредоточиться на последовательности процессаов и "тактике" перебора файлов...
Наверное, поэтому мне так трудно. Очевидно, что я совершаю методическую ошибку. Я пытаюсь одновременно "ехать на автомобиле и ремонтировать его" (еще одна метафора... только для того, чтобы оправдать собственную глупость.
Здесь я попытался было проверить все чистящие операторы в одном методе в цикле, но влетел в непонятные ошибки, подключил дебаггер... оказалось, что один из файлов (апрель) в папке с заголовком, а остальные - нет... Начал пробовать все подряд, а потом написал-таки правила...
воскресенье, 5 апреля 2015 г.
Пример моей глупости: В папке пара десятков ... файлов... пишем класс For1aug2_csv
Но пост публикую. Здесь все же записан процесс моей работы (а исправления ошибок в следующих постах). Вот неправильное начало поста:
Этот класс будет построен по тому же принципу, что и AEBto3tables - метод с итератором по файлам в папке вызывает последовтельно методы проверки однородности таблиц, чистки столбцов, конвертации форматов, добавления столбцов, конкатенции таблиц. Пишу все в Spyder на компьютере "Kali"
пятница, 3 апреля 2015 г.
Проблемы с поддельным планшетом Samsung Galaxy Note N8000 - как я постигаю Android
Планшет постоянно "сбрасывает" WiFi подключение. А у меня нет ни знаний, ни времени, чтобы разобраться в чем же дело. Наконец, вчера угрохал целый день на то, чтобы понять, как быть.
Вот результаты: на обычном linux стоят библиотеки и дополнения, которые разруливает (java) Dalvik Virtual Machine. Пользователя система пускает только в пользовательские папки. Нужно получить права root, чтобы удалить "системные" файлы с вирусами, которые нашел DrWeb, которого я с большим трудом установил через Play Market. Администрировать планшет лучше с ноутбука, для этого намерен использовать ADB, которую не стал устанавливать отдельно, поскольку просчитал, что это чатсть Android-SDK. С разными вариантами SDK не разобрался, потому тупо залил Android Studio на w8 (у меня фобия к Eclipse) .
Здесь винегрет из ссылок на документацию Android, статьи про все упомянутые инструменты и библиотеки, а также и на Samsung Kies..., вирусы
четверг, 2 апреля 2015 г.
Байда с иероглифами - это Baidu... или техника "пьяный кулак" при охоте на вирусы в заповеднике Windows XP
Польза от поста: попробовал Baidu antivirus, и он мне очень понравился. Теперь лирика: приятель принес ноутбук Toshiba с Windows XP без батареи и с выломанным CD-Rom. При первом знакомстве с замызганым аппаратом, на котором (якобы) переустановили Widows, я быстро нашел (гениальное) решение: установить на него Linux Debian.
Но приятель заявил, что он слов таких не знает, сидит пьет старку и всего ботся..., и с работы его (матерого инженера теплосетей) уволили, так что компьютер нужен срочно для печатания резюме и просмотра порно-роликов. Ему бы только звук включить, да Word поставить...
Дело было вечером, мне очень не хотелось пускаться во все тяжкие с... год, как не поддерживаемой XP..., но ...
вторник, 31 марта 2015 г.
Pandas как лучше склеивать файлы... Справочник методов read_csv, to_csv, DataFrame
Это третий пост (подряд) на эту тему. Мы разобрались с методами чистки и конвертации столбцов в DataFrame(). Теперь прежде, чем сделать из всех файлов в папке один, соберем здесь методы и свойства read_csv, to_csv Их несколько десятков, а у объекта DataFrame - несколько сотен. Так что здесь получился справочник
понедельник, 30 марта 2015 г.
Pandas или file.read... Типовая задача: В папке пара десятков сравнительно коротких файлов...
Перебрали файлы в папке, из имени каждого вырезали название месяца, из словаря добавили год и последний день месяца, потом добавили столбец и конвертировали его из строки в дату (object -> datetime64[ns] ) И все это с выписками и ссылками на два мануала и документацию Pandas. Все на фоне рефлексий по поводу алгоритма...
воскресенье, 29 марта 2015 г.
Ищем команды для проверки, чистки и конвертации столбцов в числовой формат
Здесь я попробовал методы для проверки одородности таблиц и чистки столбцов .describe() .str.contains('%') .replace('%','').get .replace('%','').astype(int) .index.value_counts()
Как-то все трудно шло, отчасти потому, что не могу понять принципов построения методов. Например, долго искал, как превести столбец в числовой формат, оказалось все очень просто .astype(int)
воскресенье, 22 марта 2015 г.
Грязные AEBto3tables - осваиваем 10 из 100 опций read_csv Pandas - как читать построчно куски csv файла
Здесь возвращаемся к папкам с "замусоренными" полуфабрикатами после парсинга pdf-файлов с данными продаж автомобилей с сайта AEBrus.ru в 2014г.
Каждый файл надо просмотреть, убрать особенности форматирования в каждом столбце (например, в качестве разделителея разрядов могут испоьзоваться и запятые, и пробелы), добавть столбец даты(месяца)... не говоря уже о такой ерунде, как traling spaces, кавычки, лишние звездочки (*) и прочее...
Начал считывать файл в DataFrame и тут же получил ошибку "CParserError: Error tokenizing data. C error: Expected 8 fields in line 38, saw 9", быстро обнаружил, что можно просто не читать эту строку..., а потом и обработчик ошибок нашелся...
пятница, 20 марта 2015 г.
"Brackets" и ссылки для установки новых универсальных текстовых редакторов
Пробуя поиск с nbViewer набрел на документацию "Python for Vision Research", а там классная подборка редакторов кода. Вот "редакторы нового типа": SublimeText, Zed, Atom, Brackets, LightTable Я их посмотрел "между делом"... и что-то даже установил. Очевидно, что их (бесплатные) нужно будет пробовать.
Здесь я пытался переустановить "Brackets", пробовал sudo apt-get -fy install, но не могу сейчас тратить время на исправление ошибки Brackets can't run on Debian 7 (Wheezy) #4816
Вернусь к этой теме позже.
среда, 18 марта 2015 г.
9 - Loading data from SQL databases
Kопипаст из pandas-cookbook.To connect to sqlite3, or MySQL, or PostgreSQL database: import sqlite3, MySQLdb, psycopg2 So far we've only talked about reading data from CSV files. That's a pretty common way to store data, but there are many others! Pandas can read from HTML, JSON, SQL, Excel (!!!), HDF5, Stata, and a few other things. In this chapter we'll talk about reading data from SQL databases.
You can read data from a SQL database using the pd.read_sql function. read_sql will automatically convert SQL column names to DataFrame column names.
read_sql takes 2 arguments: a SELECT statement, and a database connection object. This is great because it means you can read from any kind of SQL database -- it doesn't matter if it's MySQL, SQLite, PostgreSQL, or something else.
This example reads from a SQLite database, but any other database would work the same way.
8.1 Parsing Unix timestamps (atime = 1387295797 ctime=1367633260)
Kопипаст из pandas-cookbook. Секунды эпохи переводятся сначала popcon['atime'].astype(int), а потом преобразуем целые в datetime pd.to_datetime(popcon['atime'], unit='s')
It's not obvious how to deal with Unix timestamps in pandas -- it took me quite a while to figure this out. The file we're using here is a popularity-contest file I found on my system at /var/log/popularity-contest.
Here's an explanation of how this file works.
I'm going to hope that nothing in it is sensitive :)
вторник, 17 марта 2015 г.
7 - Cleaning up messy data (сортировка и фильтрация в строках Zip кодов)
Kопипаст из pandas-cookbook. Чтобы найти "мусор" сначала используем .unique(), для числовых данных можно строить гистограммы. В сводной таблице NYC обращений в службу 311 данные об инцендентах во всех штатах.
Главное, решить, что делать - убирать или изменять (пропущенные данные, дефисы, длинные строки...). Вот пример чистки по содержанию столбца requests['Incident Zip'].str.contains('-').fillna(False), .sort('Incident Zip'), zips.str.startswith('0') | zips.str.startswith('1'), zips.notnull()
One of the main problems with messy data is: how do you know if it's messy or not?
We're going to use the NYC 311 service request dataset again here, since it's big and a bit unwieldy.
6 - String Operations- Which month was the snowiest (снег и температура в 2012 году)
Kопипаст из pandas-cookbook. Таблица погоды за 2012 год из предыдущей (пятой), фильтруем по слову в столбце contains('Snow'), строим димграмму снегопадов за год, затем при помощи resample() находим сренемесячные медианы температуры и объединяем в красивые диаграммы снегопады и температутру.
You'll see that the 'Weather' column has a text description of the weather that was going on each hour. We'll assume it's snowing if the text description contains "Snow"... pandas provides vectorized string functions, to make it easy to operate on columns containing text. There are some great examples in the documentation.
понедельник, 16 марта 2015 г.
5 - Combining dataframes and scraping Canadian weather data
Kопипаст из pandas-cookbook. Исследуем погоду в Канаде, дабы потом определить, процент велосипедистов-маньяков, катающихся в дождь. Из таблицы 2012 года вырезаем март, строим график температуры, потом строим таблицу марта с несколькорми прарматрами (влажность, ветер...). Потом убираем оттуда лишние столбцы (день, месяц..., поскольку есть столбец в формате даты). Строим осредненную (за март) дневную диаграмму температуры по часам... Потом собираем все данные за год concat(data_by_month)
By the end of this chapter, we're going to have downloaded all of Canada's weather data for 2012, and saved it to a CSV. We'll do this by downloading it one month at a time, and then combining all the months together. Here's the temperature every hour for 2012!
4.1 Adding a 'weekday' column to our dataframe (Monthreal Berry bikepath table)
Продолжаем копипаст из pandas-cookbook. Возвращаемся к исследованию велодомаршрута на улице Berri. Здесь за день проезжает несколько тысяч велосипедистов. Сгруппируем их по дняям недели weekday_counts, aggregate(sum)
Okay! We're going back to our bike path dataset here. I live in Montreal, and I was curious about whether we're more of a commuter city or a biking-for-fun city -- do people bike more on weekends, or on weekdays?