Всем привет!
Для работы нам потребуется 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("tn")})
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 - NZXnВЕЛЛИНГТОН t10:... 0 New Zealand Exchange - NZX ВЕЛЛИНГТОН 10:00 - 16:45 UTC +12 UTC +13 -41.1720 174.4638 1 Australian Securities Exchange - ASXnСИДНЕЙ ... 1 Australian Securities Exchange - ASX СИДНЕЙ 10:00 - 16:00 UTC +10 UTC +11 -33.5210 151.1230 2 Japan Exchange Group - JPXnТОКИО t09:00 - 15... 2 Japan Exchange Group - JPX ТОКИО 09:00 - 15:00 UTC +9 - 35.4100 139.4100 3 Singapore Exchange - SGXnСИНГАПУР t09:00 - 1... 3 Singapore Exchange - SGX СИНГАПУР 09:00 - 17:00 UTC +8 - 1.1700 103.5000 4 Hong Kong - HKEXnГонконг t09:30 - 16:00 tUT... 4 Hong Kong - HKEX Гонконг 09:30 - 16:00 UTC +8 - 22.3000 114.2000 5 Shanghai Stock Exchange - SSEnШАНХАЙ t09:30 ... 5 Shanghai Stock Exchange - SSE ШАНХАЙ 09:30 - 15:00 UTC +8 - 31.2014 121.1313 6 National Stock Exchange of India - NSEnМумбай... 6 National Stock Exchange of India - NSE Мумбай 09:15 - 15:30 UTC +5:30 - 18.5800 72.5000 7 Moscow Exchange - MOEXnМОСКВА t09:30 - 19:00... 7 Moscow Exchange - MOEX МОСКВА 09:30 - 19:00 UTC +3 - 55.4521 37.3704 8 Dubai Financial Market’s - DFMnДУБАЙ t10:00 ... 8 Dubai Financial Market’s - DFM ДУБАЙ 10:00 - 14:00 UTC +4 - 25.1611 55.1834 9 Saudi Stock Exchange - TadawulnЭР-РИЯД t10:0... 9 Saudi Stock Exchange - Tadawul ЭР-РИЯД 10:00 - 15:00 UTC +3 - 24.3900 46.4236 10 Johannesburg Stock Exchange - JSEnЙОХАННЕСБУР... 10 Johannesburg Stock Exchange - JSE ЙОХАННЕСБУРГ 09:00 - 17:00 UTC +2 - -26.0842 28.0301 11 Frankfurt Stock Exchange - FWBnФРАНКФУРТ t09... 11 Frankfurt Stock Exchange - FWB ФРАНКФУРТ 09:00 - 17:30 UTC +1 UTC +2 50.0649 8.4047 12 Swiss Exchange - SIXnЦЮРИХ 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 - LSEnЛОНДОН t08:00 - ... 13 London Stock Exchange - LSE ЛОНДОН 08:00 - 16:30 UTC 0 UTC +1 51.3026 -0.0739 14 BM&FBOVESPAnСАН-ПАУЛУ Бразилия t10:00 - 17:2... 14 BM&FBOVESPA САН-ПАУЛУ Бразилия 10:00 - 17:20 UTC -3 UTC -2 -23.3000 -46.3700 15 New York Stock Exchange - NYSEnНЬЮ-ЙОРК t09:... 15 New York Stock Exchange - NYSE НЬЮ-ЙОРК 09:30 - 16:00 UTC -5 UTC -4 40.4342 -73.5939 16 Toronto Stock Exchange - TSXnТОРОНТО t09:30 ... 16 Toronto Stock Exchange - TSX ТОРОНТО 09:30 - 16:00 UTC -5 UTC -4 43.3855 -79.2307 17 Chicago Stock Exchange - CHXnЧИКАГО 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 и тоже попробовать.
Успехов вам!
Автор: разработчик 80-го уровня