От аналитика данных до разработчика Python

Я пошел не по обычному пути, став разработчиком Python. Я любил каждую часть моей степени; Однако степень бакалавра географии в Нортумбрии не часто ассоциируется с написанием кода. Я решил пройти год стажировки, и навыки работы с модулями ГИС в университете хорошо подготовили меня к стажировке в Vortexa в качестве аналитика геопространственных данных. Моя первая роль заключалась в отображении внутреннего взгляда Вортексы на мир. Во время стажировки я изучил SQL, так как нашел его важным инструментом для анализа данных.

При изучении SQL я обнаружил, что требуется 3 компонента;

  1. Ресурсы для изучения основ — я использовал w3schools в качестве основного ресурса.
  2. Наставники в моей команде, к которым я мог обратиться, когда у меня возникала проблема — специалисты по данным и инженеры Vortexa были более чем готовы выделить время из своего дня, чтобы помочь мне составить сложный запрос.
  3. Практика. Чем больше запросов я делал, тем легче становилось.

После окончания интернатуры я вернулся в университет, чтобы получить степень. 11 месяцев спустя, получив степень, я вернулся в Vortexa и выразил желание научиться программировать.

Мои коллеги предложили Python как хороший язык для начинающих. Я всегда восхищался навыками своих наставников, которые помогали мне изучать SQL, и чувствовал, что я нахожусь в идеальной обстановке для обучения.

С тех пор, как я вернулся, я обнаружил, что, потратив немного времени и усилий, любой может стать знатоком Python и открыть уровень анализа, который может ответить на вопросы, которые ранее считались слишком сложными, чтобы даже пытаться!

Я подошел к изучению Python так же, как к SQL, однако вместо того, чтобы использовать бесплатный ресурс, я записался на курс на Udemy. Курс показывает вам основы Python; как его настроить на вашем компьютере и как запускать ноутбуки Jupyter. Блокноты Jupyter — отличный ресурс при изучении Python, поскольку они позволяют запускать блоки кода и видеть результаты на каждом этапе; вам не нужно запускать весь скрипт каждый раз, когда вы хотите увидеть, как ваш новый код изменил вывод.

Сначала я приходил на работу на час раньше, чтобы изучать Python, и после месяца самостоятельного обучения я стал достаточно уверенным, чтобы начать выполнять задачи Python. Именно тогда мое обучение начало ускоряться, поскольку я не только проходил курс за час до работы, но и практиковался в течение дня, решая реальные проблемы. Когда я вернулся в университет, Vortexa значительно выросла. Наряду со знакомыми лицами и предыдущими наставниками было еще больше желающих выделить время, чтобы заняться со мной парным программированием.

Наконец, когда я начал изучать Python, я обнаружил, что многие из библиотек и модулей, которые вы импортировали, имели отличные примеры, которые, как только вы их поняли, можно было немного настроить в соответствии с вашим вариантом использования, и они работали отлично. Если какие-либо настройки, которые вы делаете, не работают, вы также можете обратиться к Переполнению стека. Для тех, кто не знает Stack Overflow, это веб-сайт, на котором люди публикуют свои проблемы с кодированием, а члены сообщества помогают решить их проблемы.

Теперь, когда я рассказал свою историю обучения программированию, давайте поработаем вместе, чтобы ответить на одну из самых горячих тем на рынке нефти, используя Vortexa Python SDK.

В поисках ответов на горячие темы на рынке нефти

Мы создали SDK, чтобы обеспечить быстрое интерактивное программное исследование наших данных. Этот инструмент позволяет специалистам по обработке и анализу данных, аналитикам и разработчикам эффективно исследовать мировые движения нефти, переносимой водой, и создавать собственные модели и отчеты с минимальными затратами на настройку. — Кит Берджесс, старший специалист по данным, Vortexa

Используя Python, мы перетащим данные Vortexa в Pandas DataFrame с помощью SDK. (Pandas — это библиотека для анализа и обработки данных с открытым исходным кодом для Python). Мы также рассмотрим, как экспортировать окончательный фрейм данных в формате CSV (которым вы можете поделиться с коллегами) или открыть в Excel, готовый к анализу.

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

Попутно я поделюсь парой советов и приемов, которым научился за последний год. Вы также можете получить доступ к блокноту Jupyter Notebook, который использовался повсюду, чтобы следовать здесь.

Начиная

В документации SDK есть раздел часто задаваемых вопросов по настройке, который можно найти здесь. Он охватывает все, что вам нужно знать, чтобы начать использовать SDK на вашем компьютере; в том числе где запросить демо.

Импорт модулей и библиотек

В начале блокнота нам нужно импортировать библиотеки и модули, которые мы собираемся использовать. В этой записной книжке мы используем три конечных точки Vortexa SDK, библиотеку DateTime, Pandas и Matplotlib. Чтобы использовать их в блокноте, мы должны импортировать их следующим образом:

from vortexasdk import Products, CargoTimeSeries, Geographies
from datetime import datetime
import pandas as pd
import matplotlib.pyplot as plt

Учебное пособие по конечной точке продуктов

Сначала я покажу вам, как получить идентификатор Vortexa для интересующего вас продукта с конечной точки продукта. Хотя есть много способов сделать это, я покажу вам только один пример, который, по моему мнению, был лучшим вариантом. В документации конечной точки продуктов мы можем увидеть примерную строку кода, которая показывает нам, как искать разные продукты в списке.

df = Products().search(term=[‘diesel’, ‘fuel oil’, ‘grane’]).to_df()

Давайте запустим эту ячейку в Jupyter Notebook. Когда вы запустите первую ячейку, сторона изменится с «In []» на «In [*]». Когда ячейка завершит работу, она изменится на «In [1]».

Если вы наберете `df.head` в ячейке и запустите ее, вы увидите первые несколько результатов для примера запроса.

Что мы делаем, так это вызываем функцию head(), которая используется для получения первых n строк DataFrame. Количество возвращаемых строк определяется числом в скобках, по умолчанию это число равно 5.

Не зная много о Python, вы можете видеть, что есть три условия в квадратных скобках, которые используются для описания продуктов в мире нефти, и запрос возвращает каждый идентификатор продукта, в котором имя содержит одно из значений в списке. Для поиска идентификатора продукта сырой нефти/конденсата мы можем удалить эти три термина и вместо этого вставить «сырая нефть»:

crude_search_df = Products().search(term=[‘crude’]).to_df()

Вывод этого запроса в настоящее время возвращает 18 продуктов со словом «сырой» в названии. Поскольку нам нужна только информация, содержащаяся в одной строке DataFrame, где столбец имени равен «Crude/Condensates», мы можем запросить DataFrame:

crude_search_df.query(“name==’Crude/Condensates’”)

Удобный совет — увеличить ширину столбцов, отображаемых в блокноте Jupyter, — запустить эту команду

pd.set_option(‘max_colwidth’, 75)

Теперь, если мы снова запустим наш запрос, вы увидите полную ширину столбца и весь идентификатор.

В записной книжке я также показал, как запрашивать конечную точку географических данных. Однако, поскольку это похоже на конечную точку продуктов, нет особого смысла вдаваться в подробности. Вместо этого я покажу, как изменить пример конечной точки CargoTimeSeries, и рассмотрю нашу горячую тему — сырое плавучее хранилище в водах Китая.

Учебное пособие по конечной точке CargoTimeSeries

Для начала рассмотрим пример в документации:

Давайте вместе разберем это построчно, чтобы понять, что происходит.

1) The first line finds the ID for Rotterdam using the geographies endpoint and assigns it to a variable called 'rotterdam'
2) The ID for crude oil is assigned to a variable called 'crude' using the products endpoint
3) Then it calls the CargoTimeSeries endpoint
4) timeseries_unit argument is set to 'bpd' which means the unit is set to barrels
5) timeseries_frequency argument is set to 'month' which means the time scale is set the months
6) filter_origins argument is set to 'rotterdam' the variable defined in the 1st line
7) filter_products argument is set to crude which was defined in the 2nd line
8) filter_activity argument is set to loading_state.
9) filter_time_min, the start time for the query is set to the beginning of 2018
10) filter_time_max, the end time for the query is set to the end of 2018
11) The search result is turned into a DataFrame

Теперь давайте посмотрим, какие изменения были внесены в пример запроса:

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

1) We can assign the ID for China to a variable called 'china_id' using the ID we found earlier in the notebook
2) Assign the ID for the Crude/Condensates to a variable called 'crude_condesates_id'
3) We keep this the same as before as we are calling the same endpoint.
4) For our 4th line, I prefer to think of things in terms of tonnes so I’m going to change the timeseries_unit to be 't'.
5) For the 5th line, I’m going to change 'month' to 'day' as I’d like to see the change daily
6) As I’m not concerned where the crude/ condensates have come from. I’m going to remove the filter_origins argument and replace it with filter_storage_locations, and set it to 'china_id' which we have defined in the first line.
7) Set the filter_products argument to 'crude_condesates_id' which we have defined in the 2nd line.
8) This time for the 8th line I’m going to set the filter_activity to ‘storing_state’.
9) Here I have changed the date to be at the start of this year
10) Using 'datetime.today().date()' we get today’s date
11) I am going to keep the 11th line the same as I would like the DataFrame results to be similar (or the same) to the first query.

Экспорт ваших данных в формате CSV

Если вы хотите экспортировать окончательный DataFrame в формате CSV, используйте следующее:

df_fs.to_csv(‘~/Desktop/chinese_floating_storage.csv’)

На вашем рабочем столе теперь должен быть файл с именем chinese_floating_storage.csv.

Последние мысли

Сегодня мы узнали, как взять пример кода из документации Vortexa Python SDK и изменить его, чтобы он соответствовал реальному примеру. Это навык, который вы можете применить к любому пакету Python. Если вы хотите изучить больше примеров для Vortexa SDK, вы можете найти всю документацию здесь.

Я надеюсь, что прочитав это и следуя за блокнотом, вы обрели больше уверенности в написании кода на Python и видите, что изучение языка не так сложно, как кажется. Python позволяет пользователю гибко работать со своими данными и обеспечивает еще более глубокий анализ, что можно увидеть с помощью Vortexa Python SDK.

И это все, что нужно сделать.