python-visualization / python-visualization/folium
FeatureGroupSubGroup: nth level subgroups
オープン
まだ誰も着手していません。
More info needed
- 主要言語
- Python
- スター
- 7.4k
- フォーク
- 2.3k
- 平均マージ
- 17時間 22分
- マージ済み PR(30日)
- 11
説明
Describe the bug
I am using quite a few levels of recursion to generate a map that has subgroups within subgroups, and im not sure how to fix the issue, or if there is a better method.
To Reproduce
theres alot going on here... the repeated for loops are to keep the buttons ordered by hierarchy.
import folium
from folium import plugins
#####################################################################################
coord = df['Location'].apply(fetch_lat_lon)
df['Lat'] = coord.apply(lambda x: x[0] if isinstance(x, tuple) else None)
df['Long'] = coord.apply(lambda x: x[1] if isinstance(x, tuple) else None)
df['Result'] = (~df['Impounded'].isna().astype(int)).apply(lambda x: _results[x])
df['Interval'] = (datetime.now() - df.index).days
df['Weekday'] = df.index.weekday.map(lambda x: _days[x])
df['Time'] = df.index.hour
df = df[~df['ID'].isna()]
#####################################################################################
m = folium.Map(location=[0, 0], zoom_start=14)
results = {}
intervals = {}
days = {}
times = {}
_results = ['Complete', 'Canceled']
_intervals = [7, 30, 90, 365] ## days before now
_days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
_times = range(24)
for result in _results:
results[result] = folium.FeatureGroup(name = result)
m.add_child(results[result])
for result in _results:
for interval in _intervals:
intervals[f'{result}_{interval}'] = plugins.FeatureGroupSubGroup(results[result], f'{interval} Days')
m.add_child(intervals[f'{result}_{interval}'])
for result in _results:
for interval in _intervals: ## days before now
for day in _days:
days[f'{result}_{interval}_{day}'] = plugins.FeatureGroupSubGroup(intervals[f'{result}_{interval}'], day)
m.add_child(days[f'{result}_{interval}_{day}'])
for result in _results:
for interval in _intervals: ## days before now
for day in _days:
for time in _times:
if time < 12:
if time !=0:
times[f'{result}_{interval}_{day}_{time}'] = plugins.FeatureGroupSubGroup(days[f'{result}_{interval}_{day}'], f'{time} AM')
m.add_child(times[f'{result}_{interval}_{day}_{time}'])
else:
times[f'{result}_{interval}_{day}_{time}'] = plugins.FeatureGroupSubGroup(days[f'{result}_{interval}_{day}'], f'{time + 12} AM')
m.add_child(times[f'{result}_{interval}_{day}_{time}'])
elif time > 12:
times[f'{result}_{interval}_{day}_{time}'] = plugins.FeatureGroupSubGroup(days[f'{result}_{interval}_{day}'], f'{time - 12} PM')
m.add_child(times[f'{result}_{interval}_{day}_{time}'])
else:
times[f'{result}_{interval}_{day}_{time}'] = plugins.FeatureGroupSubGroup(days[f'{result}_{interval}_{day}'], f'{time} PM')
m.add_child(times[f'{result}_{interval}_{day}_{time}'])
for result in _results:
for interval in _intervals: ## days before now
for day in _days:
for time in _times:
group = times[f'{result}_{interval}_{day}_{time}']
condition = ((df['Result'] == result) &
(df['Interval'] <= interval) &
(df['Weekday'] == day) &
(df['Time'] == time)
)
_df = df[condition].dropna()
for i in range(len(_df)):
lat = _df['Lat'].iloc[i] - _df['Lat'].mean()
long = _df['Long'].iloc[i] - _df['Long'].mean()
folium.Marker([lat, long]).add_to(group)
folium.LayerControl(collapsed=True).add_to(m)
m.save('TESTING.html')
Expected behavior
When all button conditions are met, points will display,
Environment (please complete the following information):
- chrome
- jupyter notebooks
- vs code
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
提供された FeatureGroupSubGroup の構築と、Jupyter/VS Code の再現環境で生成された TESTING.html から始め、1 レベルを超えるネストされたサブグループが想定どおりに表示および切り替えられるかを確認します。n 番目のレベルで望まれる動作を定義し、指定されたポイント表示条件を含む最小限のマップ再現で確認します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- jupyter-notebook, python
- 領域
- data-visualization
- issue の種類
- 機能追加
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 停滞
- 明瞭さ
- 説明が足りない
- 初心者へのやさしさ
- 25/100