Top.Mail.Ru
? ?

Entries by tag: python

https://towardsdatascience.com/excel-vs-python-how-to-do-common-data-analysis-tasks-54f1bdd6dfaa
Я по роду своей деятельности очень много работал и работаю с Excel. Так уж спладываются обстоятельства. Я бы давно перешел на Python, но пока не могу. В этой статье рассказывается как можно использовать библиотеку pandas для анализа табличных данных в csv формате

Image

https://towardsdatascience.com/how-to-download-and-visualize-your-twitter-network-f009dbbf107b
Люблю такие вещи. Во-первых, конкретно. Во-вторых, визуализация. В-третьих, такую SNA интересно было бы собрать не только из Twitter. В-четвёртых, просто прикольно. На заметку.
А вообще, сколько разных интересных вещей попадаются на глаза. Не удивительно, что они разбегаются :)

Image

Tags:

Идея первая. Воспользоваться pandas_datereader. Вот код, который я почерпнул здесь:

import datetime
import pandas_datareader
sdate = datetime.datetime(2019,10,31)
edate = datetime.datetime.today()
code = 'LSRG'
data = pandas_datareader.DataReader(code, 'moex', start=sdate, end=edate)
print(data[['OPEN', 'HIGH', 'LOW', 'CLOSE']].tail(10))
data[['OPEN', 'HIGH', 'LOW', 'CLOSE']].plot()



Если не заморачиваться с графиком (последнее: ...plot()), то у меня получилось с ходу вот это:

Image

То есть, грубо говоря, первый заход получился позитивным, код работает! Но есть кое-какие вопросы. Например, смущает то, что данные полученные таким образом могут в какой-то момент оказаться устаревшими или несоответствующими реальной цене на бирже. Об этом собственно и идет речь в данном запросе.

Идея вторая. Вот одна интересная ссылка: https://www.moex.com/a2193

На этой странице изложена информация по программному интерфейсу к информационно-статистическому серверу (ИСС) Московской биржи. Есть руководство пользователя и примеры на Python и VB.Net. Их конечно я еще не успел рассмотреть. Потому что надо бы вчитаться и в руководство, и в примеры, и вообще немного разобраться с правилами. Но вот на что сразу следует обратить внимание:

Аналогично продукту MOEX Trade INFO, который также работает через ИСС, данные могут предоставляться или по подписке в режиме реального времени или в свободном доступе (без авторизации, но с задержкой).

То есть в свободном доступе данные предоставляются с задержкой. Ну и ладно пока что! Для учебных целей данных с задержкой вполне достаточно. Зато у этого второго метода есть одно важное преимущество, мне кажется. Данные из первоисточника!

P.S. Для понимания. Примеры с Московской биржи на Python2 
Wow! Получился кусок работающего кода (источник здесь):

import pandas_datareader as pdr
import datetime
import pandas as pd

def test():
    aapl = pdr.get_data_yahoo('AAPL', 
                          start=datetime.datetime(2006, 10, 1), 
                          end=datetime.datetime(2012, 1, 1))
    #aapl.to_csv('data/aapl_ohlc.csv')
    #df = pd.read_csv('data/aapl_ohlc.csv', header=0, index_col='Date', parse_dates=True)
    print(aapl.loc[pd.Timestamp('2006-11-01'):pd.Timestamp('2006-12-31')].head())
    
                          
if __name__ == '__main__':
    test()





И что в итоге? После запуска я получил вот такую шикарную таблицу:
Image
ImageImage

Это данные котировок Apple от 2006 года, скачанные с Yahoo!Finance. Маленький тест, который прошел вполне себе удачно.

Кстати, закомментированные строки - это то, что позволяет сохранить полученнный временной ряд с котировками в CVS-файл и потом прочитать его. Также проверил - работает!

Разумеется, для этого мне пришлось выполнить команду:
pip install pandas-datareader

В ходе выполнения мне заодно и pandas установился :)
Или вот такая статья на английском: Python and Finance – Power Up Your Spreadsheets
И ее перевод на русский язык: Как финансовый директор использует Python в работе
Как, однако, легко завести тематический блог, если просто переводить с английского на русский интересные статьи! )))

Python for Finance

Интересная статья на Хабре: Руководство "Как использовать Python для алгоритмической торговли на бирже"
Сама статья 2017 года - но вот этот вот Руководство Python fo FInance от ноября 2019 года
Это короткая заметка - ставлю себе, чтобы просто не забыть))
Этот пост - продолжение предыдущего. Как только я понял, как работает gdata, сразу начал писать класс, в котором стал тестировать различные возможности gdata. Нижеприводимый код позволяет получить значение конкретной ячейки на конкретной странице вашей электронной книги. Представляет собой сочетание возможностей двух пакетов: gdata и lxml

#!/usr/bin/python

import gdata.spreadsheet.service
from lxml import etree

class YourClass(object):
    def __init__(self):
        email = 'your_email'
        password = 'your_password'

        # Find this value in the url with 'key=XXX' and copy XXX below
        self.key = 'your_spreadsheet_key'
        # All spreadsheets have worksheets. I think worksheet #1 by default always
        # has a value of 'od6'
        self.id = 'od6'

        self.client = gdata.spreadsheet.service.SpreadsheetsService()
        self.client.email = email
        self.client.password = password
        self.client.source = 'Example Spreadsheet Writing Application'
        self.client.ProgrammaticLogin()
    def get_value(self, row, col):
        rc = 'R' + str(row) + 'C' + str(col)
        feed = self.client.GetCellsFeed(self.key, self.id, rc)
        xml = feed.ToString() # http://gdata-python-client.googlecode.com/hg/pydocs/gdata.spreadsheet.html
        tree = etree.fromstring(xml)
        ns = {'ns1': 'http://schemas.google.com/spreadsheets/2006'}
        cells = tree.xpath('//ns1:cell', namespaces=ns)
        cell = cells[0]
        return cell.text

Tags:

Статья о том, как напрямую из Python взаимодействовать с электронными таблицами Google:

Write to a Google Spreadsheet from a Python script by MATT CUTTS on FEBRUARY 10, 2009

Статья не очень свежая, тем не менее, мне удалось установить на своем компе пакет gdata, и попробовать реализовать следующий простой алгоритм:

#!/usr/bin/python

import time
import gdata.spreadsheet.service

email = 'youraccount@gmail.com'
password = 'yourpassword'
weight = '180'
# Find this value in the url with 'key=XXX' and copy XXX below
spreadsheet_key = 'pRoiw3us3wh1FyEip46wYtW'
# All spreadsheets have worksheets. I think worksheet #1 by default always
# has a value of 'od6'
worksheet_id = 'od6'

spr_client = gdata.spreadsheet.service.SpreadsheetsService()
spr_client.email = email
spr_client.password = password
spr_client.source = 'Example Spreadsheet Writing Application'
spr_client.ProgrammaticLogin()

# Prepare the dictionary to write
dict = {}
dict['date'] = time.strftime('%m/%d/%Y')
dict['time'] = time.strftime('%H:%M:%S')
dict['weight'] = weight
print dict

entry = spr_client.InsertRow(dict, spreadsheet_key, worksheet_id)
if isinstance(entry, gdata.spreadsheet.SpreadsheetsList):
  print "Insert row succeeded."
else:
  print "Insert row failed."


Могу сказать - на чем я срезался. На этой команде:

entry = spr_client.InsertRow(dict, spreadsheet_key, worksheet_id)

Он мне выдал какую-то ошибку, которую я не смог проанализировать (дело было в четвертом часу ночи, сами понимаете!) Что-то вроде статус 400, bad request. Эта ошибка обсуждается, кажется, здесь и здесь.
Кроме того, в вышеупомянутой статье есть какое-то обсуждения в комментах.

Для сведения: здесь находится код службы spreadsheet.

P.S. А ларчик просто открывался. Читайте, товарищи, как говорится, документацию - там все написано. Помогло даже не столько чтение issue 363 и 481, сколько самого исходного кода. Просто я не обратил поздно ночью внимания на то, что данные вставляются в "плоскую таблицу", то есть в электронную таблицу в левом верхнем углу с data, weight и time. То есть так, как показано на картинке в вышеозначенном примере. Теперь все заработало :)

Tags:

В небольших проектах SQLITE3, основанных на Python (в частности, Django) - как раз та база, что надо. Просто. Удобно. Эффективно. Меня вообще привлекает в программировании то, что просто. А тут - представьте себе - вся база данных умещается в один простой файл, который хранится на жестком диске.

Работая на Python, понимаешь, что есть выбор. Доступ к базе sqlite3 можно получить, используя библиотеку sqlite3 - об этом в подробностях здесь:
11.13. sqlite3 — DB-API 2.0 interface for SQLite databases

...или можно, запустив оболочку sqlite shell, об этом подробно - здесь:

Command Line Shell For SQLite

И так, и так получается неплохо. Но мне больше в душу запал второй вариант.

Как запустить оболочку? Если вы работаете на Linux (у меня на компе - старая добрая Ubuntu), откройте терминал, зайдете в каталог, где у вас база данных (пусть она называется, скажем, test.db) и введите команду:

$ sqlite3 test.db

Есть в оболочке sqlite3 приятные моменты. Например, такая команда (источник: SQLite command line shell basic DDL and DML – DOS, ищи п. 22):

sqlite> .schema University
CREATE TABLE University (
UniversityID INTEGER PRIMARY KEY,
UniversityCode TEXT NOT NULL,
UniversityName TEXT NOT NULL, Country TEXT);
sqlite>

Легко и просто можно посмотреть схему конкретной таблицы. Другая команда:

sqlite> .tab

С ее помощью вы получите список таблиц, которые есть в базе test.db. Далее, допустим, что в базе test.db есть таблица persons. Содержимое этой таблицы вы получаете легко и просто с помощью команды:

sqlite> select * from persons;

(Совет: не забудьте про точку с запятой в конце команды, иначе не сработает!)

Если сравнивать с библиотекой sqlite3, то вроде и там все то же самое можно сделать. Но мне - далеко не специалисту в SQL - как-то затруднительно понять, как получить с помощью этой библиотеку список таблиц базы данных или схему конкретной таблицы. Я невнимательно читал документацию? Очень может быть. Но ведь я - ленивый юзер. А ленивый юзер при прочих равных условиях - конечно, выберет sqlite3 sherll. IMHO

Tags:

Пришел к твердому выводу, что для легкого и изящного Python технология XML несколько тяжеловата. То есть в ряде случаев она может быть весьма полезной и эффективной, но увы, далеко не всегда. Это особенно четко осознаешь, когда пробуешь руками альтернативу. См. статью:

Python + YAML

Там кратко и ясно изложено, почему YAML лучше.

Что же касается целевого назначения YAML, то он годится не только для конфигов, но как мне представляется и для хранения структурированных текстовых данных. Получается отличная вещь! Легкое решение - не то что XML. Есть иерархическая структура данных - не то что CSV. И парсить файлы действительно легко. В результате мне удается организовать хранение требуемых данных вне базы данных типа SQLite3 или MySQL.

Зачем это надо? Есть одно соображение. Если данных пока не очень много, структура данных определена не четко и может быть подвержена частым изменениям, и вообще вы пока не знаете, в каком направлении будет развиваться ваш проект. Тогда гибкий подход к управлению данными - то что надо. По производительности это не то что СУБД, зато гибкость все окупает.

Tags:

Profile

Image
Imagechevalry
chevalry

Board




Поиск по блогу
Яндекс


free counters

Locations of visitors to this page

Latest Month

December 2024
S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    

Tags

Syndicate

RSS Atom

Comments

Powered by LiveJournal.com
Designed by Lilia Ahner
Image