Ответы пользователя по тегу Python
  • Как сделать https запрос на python 3.4 через прокси?

    @lPolar
    data scientist
    Попробуйте grab, там есть и обычные и SOCKS-прокси.
    Ответ написан
    Комментировать
  • Форматирование вывода в python в виде таблицы?

    @lPolar
    data scientist
    В какой структуре данных хранится таблица? List of lists/dict?
    В любом случае, практически любой python-контейнер можно залить в pd.DataFrame
    import pandas as pd
    import numpy as np
    df = pd.DataFrame(np.random.uniform(0,1,size=(3,300))
    print(df.head())
    Ответ написан
    Комментировать
  • SQLAlchemy, как правильно работать с большими таблицами?

    @lPolar
    data scientist
    Что стоит сделать со стороны sqlalchemy:
    1. Отключите autocommit во время поэлементного update.
    2. Лучше разрезать таблицу на подсекции, которые обновляются, при необходимости delete подсекцию и дописывать новые данные через insert.
    3. Заливайте данные через нативные библиотеки (для Oracle - cx_Oracle и т.д.)
    sqalchemy хорош своим API, но из за его гибкости местами он очень медленный.
    Какая бд у Вас?
    Ответ написан
  • Как выгрузить определенные поля таблицы из DB Oracle 11G в файл скриптом, написанным на Python 3.4?

    @lPolar
    data scientist
    Я бы решил эту задачу так:
    1. Pandas+sqllite, если объем выборок <30-50 тыс. записей и <10-12 колонок:
    import pandas as pd
    from sqlalchemy import create_engine
    oracledb = create_engine('oracle://user:password@name') #name - название подключения в TNS файле
    query = """
    select  /*+parallel(4)*/ 2 from dual
    """ 
    data = pd.read_sql_query(query,oracledb,coerce_float=True)
    print(data)

    2. Pandas +conda+iopro (это коммерческий загрузчик с 30 дневной лицензией, подойдет для заливки 3-4 млн. записей):
    import pandas as pd
    import iopro.pyodbc as pdbc
    conn_string = "DSN=OracleDSN;UID=user;PWD=password"
    conn = pdbc.connect(conn_string)
    query = """
    select /*+parallel(4)*/ 2 from dual
    """
    data = pd.DataFrame.from_dict(conn.cursor(query).fetchasarray(),orient='columns')
    print(data)
    3. Если данных больше 3-4 миллионов, то запрос вы в RAM не пробросите, но можно сделать так:
    import pandas as pd
    from sqlalchemy import create_engine
    oracledb = create_engine('oracle://user:password@name') #name - название подключения в TNS файле
    query = """
    select /*+parallel(4)*/ 2 from dual
    """ 
    data = pd.read_sql_query(query,oracledb,coerce_float=True,chunksize=10000)
    for idx,chunk in enumerate(data):
        print('Loading chunk %i'%idx)
        chunk.to_csv('data_%i_chunk.csv'%idx,header=True,index=False)

    4. Если данных еще больше, то советую посмотреть здесь docs.oracle.com/cd/B25329_01/doc/admin.102/b25107/...
    Ответ написан
    8 комментариев
  • Как исправить генерацию excel файла при большом кол-ве колонок?

    @lPolar
    data scientist
    вставлю свои пять копеек.
    Конечно нативная либа для Excel это хорошо, но есть же numpy+pandas:
    import numpy as np
    import pandas as pd
    random_df = pd.DataFrame(np.random.uniform(0,1,size=(5000,5000))) #создаем df 5к x 5к
    random_df.to_excel('4k.xlsx') #записать данные в файл.
    Ответ написан
    1 комментарий
  • Кто знает алгоритмы сравнивания изображений и определения лица?

    @lPolar
    data scientist
    Пробовали - scikit-image.org ?
    Вот тут конкретный пример - blog.yhathq.com/posts/image-processing-with-scikit...
    Ответ написан
    Комментировать
  • Как парсить даты в разных форматах из Python-строки, если формат дат заранее неизвестен?

    @lPolar
    data scientist
    так же можно использовать pandas и его встроенный парсер:
    import pandas as pd
    dates = [] #тут список строк с датой
    parsed_dates = [pd.to_datetime(d) for d in dates]
    Ответ написан
    Комментировать
  • Какой язык программирования выбрать для изучения?

    @lPolar
    data scientist
    О языках для аналитики замолвлю словечко.
    Python - классный, удобный. Большой набор библиотек для работы с данными, мало специфичных функций для статистики (легко реализуются самостоятельно).
    Минусы - все в памяти (pandas Memory Error), 2to3 не для всех библиотек
    Плюсы - есть API практически ко всему на свете (а к чему нету, легко прикрутить). По поводу памяти тоже слукавил, есть например pyspark в spark 1.3 в котором классный API именно для аналитиков.
    R - если есть время врубаться в несколько нелогичные названия функций и желание получить доступ к огромному количеству удобных пакетов для глубокого анализа - отличный.
    Масштабируемость - Oracle R Enterprise/DistributedR/RevolutionR - но это не для опенсорса.
    Еще можно попробовать для аналитики - Scala,Lua, Julia (кстати очень быстрый язык).
    Ответ написан
    2 комментария
  • Хороший IDE для Python на Mac OS X?

    @lPolar
    data scientist
    Pycharm очень очень классный, особенно за его remote interpreter, это просто сказка, если приходится работать с remote-сервером.
    Но у него есть пара неприятных на мой взгляд недостатков:
    1. Очень долгое индексирование пакетов. Если это какая-нибудь Anaconda Python, где модулей порядка 300 штук, то индексируется каждый раз при запуске минут 5.
    2. Отсутствует автокомплит по некоторым модулям, в которых есть вызовы C-функций (характерный пример - numpy)
    3. Нет удобного окна для вывода графики, аля Spyder. Мне приходится рисовать много графиков в matplotlib, хочется в удобном виде (Ctrl-C/Ctrl-V) их копировать в документы. Я такую возможность нашел только в Spyder.
    P.S. Вышенаписанное актуально для Win-версии, не знаю как на OS X с этим обстоит дело.
    Ответ написан
    Комментировать
  • Как объеденить кучу Excel файлов в один?

    @lPolar
    data scientist
    Как насчет pandas?
    Допустим, все файлы лежат в одной папке, и необходимые данные лежат на первом листе, тогда это можно сделать вот так:
    import pandas as pd
    import os
    folder = r'D:\Files\excel' #папка с файлами
    files = [os.path.join(folder,f) for f in folder] #формируем список путей к файлам
    all_file_frames = [] #сюда будем добавлять прочитанную таблицу 
    for f in files:
        print('Reading %s'%f)
        tab = pd.read_excel(f)
        all_file_frames.append(tab)
    all_frame = pd.concat(all_file_frames,axis=0) #  axis=0 если нужно добавить таблицу снизу и axis=1 если нужно слева
    all_frame.to_excel('final_file.xlsx') #получим файл final_file.xlsx в os.getcwd()
    Ответ написан
    5 комментариев
  • Как авторизоваться на сайте с помощью python?

    @lPolar
    data scientist
    Думаю дело в том, что на mail есть AJAX.
    Нужно сделать следующее - через Firebug в Firefox посмотреть, какие конкретно запросы с каким содержанием шлет клиент серверу при логине, и воспроизвести эти запросы через любой удобный инструмент - grab/requests.
    Мне в этом плане нравится grab - он быстрый и легко парсит исходный код страницы.
    Ответ написан
    Комментировать
  • Существуют ли заочные курсы или стажировка по анализу данных на русском языке?

    @lPolar
    data scientist
    ИМХО, тут есть несколько аспектов:
    1. Как написал brainick , математический бэкграунд и английский в data science практически обязателен.
    Причин этому несколько: отсутствие хорошей литературы на русском языке (как по теории, так и по программированию), обилие английских терминов (lift/top/cross-validation и прочие), значение которых в переводной литературе порой объяснятся весьма туманно.
    2. Если говорить о конкретной литературе, которую стоит почитать, я бы выделил несколько уровней:
    Уровень 0
    1. Бизнес-аналитика - Паклин, Орешков (самое базовое и обзорное введение)
    2. Статистика/Тервер ( по мне, хороши книги Айвазяна/Мхитаряна)
    3. SQL - в обязательном порядке. Мне в свое время помогла книга "SQL для простых смертных"
    4. Изучаем Python - М. Лутц (наиболее полная книга по языку, все что нужно для data science здесь точно есть)
    5. Программируем коллективный разум (к слову сказать, вот в этой книге отличный перевод)
    Уровень 1
    1. Математические основы машинного обучения и прогнозирования - Вьюгин (книга сложная, без подготовки по учебникам НМУ на тему анализа и линейной алгебры лучше не подходить)
    2. Python for Data Analysis (pandas во всей красе, тут нечего добавить)
    3. Примеры и статьи по построению моделей в sklearn - на хабре в последнее время часто мелькают статьи на эту тему, там все достаточно хорошо расписано.
    Уровень 2
    1. Hadoop и иже с ним ("Hadoop в действии", "Programming Pig")
    2. Apache Spark - достаточно почитать описание Python API.
    Тут есть еще один момент - не стоит слишком привязываться к одному языку и фреймворку.
    Одна из неприятных проблем python+pandas+sklearn заключается в том, что эта связка слабо масштабируется - при 2-3-4 гб данных становится сложно разместить их в оперативной памяти. Я знаю про chunk-reading+partial_fit, но точность таких моделей оставляет желать лучшего.
    С другой стороны, если обрабатывать эти данные в pyspark, то теряется все удобство pandas.DataFrame и так далее. Отрасль data science быстро развивается и обрастает новыми технологиями, так что нужно все время держать руку на пульсе.
    UPD: в spark 1.3 появились DataFrame.
    Ответ написан
    4 комментария
  • PIP или esay_install: что лучше?

    @lPolar
    data scientist
    кстати как вариант можно попробовать conda. Из плюсов - большую часть пакетов берет уже скомпилированными. Из минусов - не все пакеты в ней есть.
    Ответ написан
    Комментировать
  • Можно ли использовать ассоциативные массивы в качестве альтернативы операторов ветвления?

    @lPolar
    data scientist
    Кстати, Лутц в "Изучаем Python" как раз писал о том, что словари и нужно использовать в качестве операторов ветвления.
    Ответ написан
    1 комментарий
  • Написание бота на Python 3.x?

    @lPolar
    data scientist
    Вопрос по автоматизации действий с сайтами действительно зачастил.
    Если нужно быстро и просто, то webtest,selenium,requests.
    Если нужно чуть медленнее, но с разными фичами, то grab,mechanize,beautifulsoup.
    Лично я использую grab, потому что он достаточно шустрый (pycurl/lxml бэкэнд быстрее python-библиотек) и потому что высокоуровнево (легкая многопоточность, обработка форм, документация на русском).
    Ответ написан
    Комментировать
  • Python. Как реализовать цикл внутри вложенного списка?

    @lPolar
    data scientist
    Первое - называть системными именами (list) переменные не есть комильфо.
    Если Вам необходимо работать со списками списков и индексировать их, доставать различные срезы, то pure python списки являются не самыми удобными структурами данных.
    На мой взгляд, тут есть несколько вариантов.
    1. pyre python через словари:
    tab={'a1':['aa1','aa2'],
         'b1':['bb1','bb2','bb3'],
         'c1':['cc1','cc2','cc3','cc4',]}
    for key in tab:
        row=tab[key]
        for el in row:
            print(el)

    2. Через pandas DataFrame - очень удобные структуры для срезов/операций по колонкам/строкам
    import pandas as pd
    l = [
       ['aa1','aa2'],
       ['bb1','bb2','bb3'],
       ['cc1','cc2','cc3','cc4',],
           ]
    df=pd.DataFrame(l)
    print(df)
    #Выведет
         0    1     2     3
    0  aa1  aa2  None  None
    1  bb1  bb2   bb3  None
    2  cc1  cc2   cc3   cc4

    Тут можно доставать срезы по одной или двум осям:
    print(df[0])
    #Выведет
    0    aa1
    1    bb1
    2    cc1
    Ответ написан
  • В каких библиотеках можно посмотреть пример хорошего кода на python?

    @lPolar
    data scientist
    Если говорить о больших и сложных библиотеках, в которых используется большое количество именно python-специфичного кода (с декораторами и прочими плюшками) , советую обратить внимание на исходный код pandas.
    Ответ написан
    Комментировать
  • Чисто теоретически, можно ли написать субд на python?

    @lPolar
    data scientist
    Можно и вполне практическую.
    labs.codernity.com/codernitydb
    Pure python, NoSQL.
    Ответ написан
    Комментировать
  • Как реализовать имитацию веб пользователя?

    @lPolar
    data scientist
    Если вся логика этих действий обворачивается в get/post запросы, достаточно написать соответствующие запросы и слать их сайту с нужной переодичностью.
    Решение на python - Grab + продебажить запросы через Firebug в Firefox.
    Ответ написан
    Комментировать
  • Почему словарь как аттрибут не уникален?

    @lPolar
    data scientist
    Мне кажется, что в данном случае переменная attr_dic, определенная в классе SomeClass при использовании этого класса остается общей для всех объектов этого класса (коряво написанный, но показательный пример на python 3):
    class SomeClass:
        attr_dic = {'a': 1, 'b': 2}
    class OtherClass:
        def __init__(self):
            self.attr_dic={'a':1,'b':2}
    some_a = SomeClass()
    some_b = SomeClass()
    print('some_a adress %i'%id(some_a)) #выведет 204146672
    print('some_b adress %i'%id(some_b)) # выведет 204148720
    print('some_a dict adress %i'%id(some_a.attr_dic)) # 204166128
    print('some_b dict adress %i'%id(some_b.attr_dic)) # 204166128
    other_a = OtherClass() 
    other_b = OtherClass()
    print('other_a adress %i'%id(other_a)) #204145392
    print('other_b adress %i'%id(other_b)) #204148592
    print('other_a dict adress %i'%id(other_a.attr_dic)) #204165448
    print('other_b dict adress %i'%id(other_b.attr_dic)) #204115000
    Ответ написан