Pull to refresh

Folium — пример изображения времени работы мировых бирж

Всем привет!


Для работы нам потребуется Jupyter Notebook, библиотеки Folium, Pandas и хорошее настроение.


Мануал для новобранцев по библиотеке Folium смотрим здесь.


Данные мы возьмем с сайта. Я воспользовался Википедией и нашел координаты всех городов.


# http://stocktime.ru/info.htm
import pandas as pd

df = pd.DataFrame({"lines":"""
New Zealand Exchange - NZX
ВЕЛЛИНГТОН  10:00 - 16:45   UTC +12     UTC +13     
Australian Securities Exchange - ASX
СИДНЕЙ  10:00 - 16:00   UTC +10     UTC +11     
Japan Exchange Group - JPX
ТОКИО   09:00 - 15:00   UTC +9  -   
Singapore Exchange - SGX
СИНГАПУР    09:00 - 17:00   UTC +8  -   
Hong Kong - HKEX
Гонконг     09:30 - 16:00   UTC +8  -   
Shanghai Stock Exchange - SSE
ШАНХАЙ  09:30 - 15:00   UTC +8  -   
National Stock Exchange of India - NSE
Мумбай  09:15 - 15:30   UTC +5:30   -   
Moscow Exchange - MOEX
МОСКВА  09:30 - 19:00   UTC +3  -   
Dubai Financial Market’s - DFM
ДУБАЙ   10:00 - 14:00   UTC +4  -   
Saudi Stock Exchange - Tadawul
ЭР-РИЯД     10:00 - 15:00   UTC +3  -   
Johannesburg Stock Exchange - JSE
ЙОХАННЕСБУРГ    09:00 - 17:00   UTC +2  -   
Frankfurt Stock Exchange - FWB
ФРАНКФУРТ   09:00 - 17:30   UTC +1  UTC +2  
Swiss Exchange - SIX
ЦЮРИХ   09:00 - 17:30   UTC +1  UTC +2  
London Stock Exchange - LSE
ЛОНДОН  08:00 - 16:30   UTC 0   UTC +1  
BM&FBOVESPA
САН-ПАУЛУ Бразилия  10:00 - 17:20   UTC -3  UTC -2  
New York Stock Exchange - NYSE
НЬЮ-ЙОРК    09:30 - 16:00   UTC -5  UTC -4  
Toronto Stock Exchange - TSX
ТОРОНТО     09:30 - 16:00   UTC -5  UTC -4  
Chicago Stock Exchange - CHX
ЧИКАГО  08:30 - 15:00   UTC -6  UTC -5  """.split("\t\n")})
df.reindex()
df["id"] = df.index
df["фондовая биржа"] = df["lines"].apply(lambda s: s.split('\t')[0].replace("\n", " "))
df["время торговой сессии"] = df["lines"].apply(lambda s: s.split('\t')[1].replace("\n", " ") if len(s.split('\t')) > 1 else "")
df["часовой пояс"] = df["lines"].apply(lambda s: s.split('\t')[2].replace("\n", " ") if len(s.split('\t')) > 2 else "")
df["при переходе на летнее время"] = df["lines"].apply(lambda s: s.split('\t')[3].replace("\n", " ") if len(s.split('\t')) > 3 else "")
df["в данный момент действует время"] = df["lines"].apply(lambda s: s.split('\t')[4].replace("\n", " ") if len(s.split('\t')) > 4 else "")
m = {0: (-41.1720,174.4638) # Веллингтон
    ,1: (-33.5210,151.1230) # Сидней
    ,2: (35.41,139.41) # Токио
    ,3: (1.17,103.50) # Сингапур
    ,4: (22.3,114.2) # Гонг Конг
    ,5: (31.2014,121.1313) # Шан Хай
    ,6: (18.58,72.50) # Мумбаи
    ,7: (55.4521, 37.3704) # Москва
    ,8: (25.1611, 55.1834) # Дубаи
    ,9: (24.3900, 46.4236) # Эр-рияд
    ,10: (-26.0842, 28.0301) # ЙОХАННЕСБУРГ
    ,11: (50.0649, 8.4047) # Франкфурт
    ,12: (47.2230, 8.3230) # ЦЮРИХ
    ,13: (51.3026, -0.0739) # ЛОНДОН
    ,14: (-23.30, -46.37) # САН-ПАУЛУ
    ,15: (40.4342, -73.5939) # НЬЮ ЙОРК
    ,16: (43.3855, -79.2307) # ТОРОНТО
    ,17: (41.54, -87.39)} # ЧИКАГО
df["lat"] = df["id"].apply(lambda i: m[i][0] if i >= 0 else 56.0)
df["lon"] = df["id"].apply(lambda i: m[i][1] if i >= 0 else 37.0)

print(len(df))
display(df)

lines id фондовая биржа время торговой сессии часовой пояс при переходе на летнее время в данный момент действует время lat lon 0 \nNew Zealand Exchange - NZX\nВЕЛЛИНГТОН \t10:... 0 New Zealand Exchange - NZX ВЕЛЛИНГТОН 10:00 - 16:45 UTC +12 UTC +13 -41.1720 174.4638 1 Australian Securities Exchange - ASX\nСИДНЕЙ \... 1 Australian Securities Exchange - ASX СИДНЕЙ 10:00 - 16:00 UTC +10 UTC +11 -33.5210 151.1230 2 Japan Exchange Group - JPX\nТОКИО \t09:00 - 15... 2 Japan Exchange Group - JPX ТОКИО 09:00 - 15:00 UTC +9 - 35.4100 139.4100 3 Singapore Exchange - SGX\nСИНГАПУР \t09:00 - 1... 3 Singapore Exchange - SGX СИНГАПУР 09:00 - 17:00 UTC +8 - 1.1700 103.5000 4 Hong Kong - HKEX\nГонконг \t09:30 - 16:00 \tUT... 4 Hong Kong - HKEX Гонконг 09:30 - 16:00 UTC +8 - 22.3000 114.2000 5 Shanghai Stock Exchange - SSE\nШАНХАЙ \t09:30 ... 5 Shanghai Stock Exchange - SSE ШАНХАЙ 09:30 - 15:00 UTC +8 - 31.2014 121.1313 6 National Stock Exchange of India - NSE\nМумбай... 6 National Stock Exchange of India - NSE Мумбай 09:15 - 15:30 UTC +5:30 - 18.5800 72.5000 7 Moscow Exchange - MOEX\nМОСКВА \t09:30 - 19:00... 7 Moscow Exchange - MOEX МОСКВА 09:30 - 19:00 UTC +3 - 55.4521 37.3704 8 Dubai Financial Market’s - DFM\nДУБАЙ \t10:00 ... 8 Dubai Financial Market’s - DFM ДУБАЙ 10:00 - 14:00 UTC +4 - 25.1611 55.1834 9 Saudi Stock Exchange - Tadawul\nЭР-РИЯД \t10:0... 9 Saudi Stock Exchange - Tadawul ЭР-РИЯД 10:00 - 15:00 UTC +3 - 24.3900 46.4236 10 Johannesburg Stock Exchange - JSE\nЙОХАННЕСБУР... 10 Johannesburg Stock Exchange - JSE ЙОХАННЕСБУРГ 09:00 - 17:00 UTC +2 - -26.0842 28.0301 11 Frankfurt Stock Exchange - FWB\nФРАНКФУРТ \t09... 11 Frankfurt Stock Exchange - FWB ФРАНКФУРТ 09:00 - 17:30 UTC +1 UTC +2 50.0649 8.4047 12 Swiss Exchange - SIX\nЦЮРИХ \t09:00 - 17:30 \t... 12 Swiss Exchange - SIX ЦЮРИХ 09:00 - 17:30 UTC +1 UTC +2 47.2230 8.3230 13 London Stock Exchange - LSE\nЛОНДОН \t08:00 - ... 13 London Stock Exchange - LSE ЛОНДОН 08:00 - 16:30 UTC 0 UTC +1 51.3026 -0.0739 14 BM&FBOVESPA\nСАН-ПАУЛУ Бразилия \t10:00 - 17:2... 14 BM&FBOVESPA САН-ПАУЛУ Бразилия 10:00 - 17:20 UTC -3 UTC -2 -23.3000 -46.3700 15 New York Stock Exchange - NYSE\nНЬЮ-ЙОРК \t09:... 15 New York Stock Exchange - NYSE НЬЮ-ЙОРК 09:30 - 16:00 UTC -5 UTC -4 40.4342 -73.5939 16 Toronto Stock Exchange - TSX\nТОРОНТО \t09:30 ... 16 Toronto Stock Exchange - TSX ТОРОНТО 09:30 - 16:00 UTC -5 UTC -4 43.3855 -79.2307 17 Chicago Stock Exchange - CHX\nЧИКАГО \t08:30 -... 17 Chicago Stock Exchange - CHX ЧИКАГО 08:30 - 15:00 UTC -6 UTC -5 41.5400 -87.3900


Взял московское время с шагом по 20 минут и нарисовал биржи зеленым, желтым, красным и синим в соответствии с тем сколько времени прошло с открытия: ноль, четверть, две четверти или три.


#README http://python-visualization.github.io/folium/docs-v0.5.0/quickstart.html#Markers

import folium

m = folium.Map(location=[55.5236, 37.6750],tiles='Mapbox Bright',zoom_start=1)
for k in range(0, len(df)):
    color='green'
    folium.Marker(location=[df.at[k,"lat"], df.at[k,"lon"]]
        ,popup=df.at[k,"фондовая биржа"],icon=folium.Icon(color=color)).add_to(m)
m.save("C:\\code\\_.htm")
display(m)

for i in range(0, 24):
    for j in range(0, 3):
        print("%02d:%02d"%(i,j*20))
        utc_hh = (i - 3) % 24
        utc_mm = j * 20
        m = folium.Map(location=[55.5236, 37.6750],tiles='Mapbox Bright',zoom_start=1)
        for k in range(0, len(df)):
            delta_hh = int(df.at[k,"часовой пояс"].split(" ")[1].replace(":30",""))
            delta_mm = 0
            cur_hh = (utc_hh + delta_hh) % 24
            cur_mm = (utc_mm + delta_mm) % 60
            min_hh = int(df.at[k,"время торговой сессии"].split("-")[0].split(":")[0])
            min_mm = int(df.at[k,"время торговой сессии"].split("-")[0].split(":")[1])
            max_hh = int(df.at[k,"время торговой сессии"].split("-")[1].split(":")[0])
            max_mm = int(df.at[k,"время торговой сессии"].split("-")[1].split(":")[1])
            step_mm = (max_hh - min_hh) * 15
            if cur_hh*60+cur_mm >= min_hh*60+min_mm and cur_hh*60+cur_mm < max_hh*60+max_mm:
                color='green'
                if cur_hh*60+cur_mm >= min_hh*60+min_mm+step_mm and cur_hh*60+cur_mm < min_hh*60+min_mm+step_mm*2:
                    color='orange'
                if cur_hh*60+cur_mm >= min_hh*60+min_mm+step_mm*2 and cur_hh*60+cur_mm < min_hh*60+min_mm+step_mm*3:
                    color='red'
                if cur_hh*60+cur_mm >= min_hh*60+min_mm+step_mm*3 and cur_hh*60+cur_mm < min_hh*60+min_mm+step_mm*4:
                    color='blue'
                folium.Marker(location=[df.at[k,"lat"], df.at[k,"lon"]]
                          ,popup=df.at[k,"фондовая биржа"]+df.at[k,"время торговой сессии"]+df.at[k,"часовой пояс"]
                          ,icon=folium.Icon(color=color)).add_to(m)
        m.save("C:\\code\\%02d_%02d.htm"%(i,j*20))
        display(m)

Получилась интересная картина.


Много картинок










































































Очень рекомендую вам не полениться, установить себе Anaconda и тоже попробовать.


Успехов вам!

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.