Esempio n. 1
0
with open('map.geojson') as f:
    laArea = json.load(f)

laMap = folium.Map(location=[18.516726, 73.856255],
                   tiles="Stamen Toner",
                   zoom_start=12)

laMap = HeatMap(df).add_to(laMap)

folium.GeoJson(laArea).add_to(laMap)

#for i,row in df.iterrows():
#    folium.CircleMarker((row.latitude,row.longitude), radius=3, weight=2, color='red', fill_color='red', fill_opacity=.5).add_to(laMap)

laMap.save('laPointMap.html')

x = pd.read_csv("a.csv")
y = x.Location[0]

locator = Nominatim(user_agent="myGeocoder")
location = locator.geocode(y)
p, q = location.latitude, location.longitude
array = [[p, q]]
x = df.append({'latitude': p, 'longitude': q}, ignore_index=True)

for i, row in x.iterrows():
    folium.CircleMarker((row.latitude, row.longitude),
                        radius=3,
                        weight=2,
                        color='red',
Esempio n. 2
0
def main():
    # read the data
    in_directory = 'amenities-vancouver.json.gz'
    data = pd.read_json(in_directory, lines=True)
    restaurants = data[(data['amenity'] == 'restaurant') |
                       (data['amenity'] == 'fast_food') |
                       (data['amenity'] == 'cafe')]
    res = pd.read_json('restaurant.json')
    fas = pd.read_json('fast_food.json')
    piz = pd.read_json('pizzeria.json')
    caf = pd.read_json('cafe.json')

    # process and split the data
    Unknown = restaurants[restaurants['name'].isnull()]
    restaurants = restaurants[~restaurants['name'].isnull()]
    restaurants['chain'] = restaurants['name'].apply(check_chain,
                                                     list_r=res,
                                                     list_f=fas,
                                                     list_p=piz,
                                                     list_c=caf)

    chains1 = restaurants[restaurants['chain'] != 'NotChain']  # 960
    Notchains1 = restaurants[restaurants['chain'] == 'NotChain']

    Notchains1 = Notchains1.assign(num=1)
    nc_group = Notchains1.groupby('name').count()
    Notchains1['num'] = Notchains1['name'].apply(get_num, df=nc_group)

    chains2 = Notchains1[Notchains1['num'] > 1]  # 711

    nchains = Notchains1[Notchains1['num'] == 1]
    chains = pd.concat([
        chains1[['amenity', 'lat', 'lon', 'name']],
        chains2[['amenity', 'lat', 'lon', 'name']]
    ],
                       axis=0)

    # analyze the data

    # draw distribution
    v_latitude = 49.14
    v_longitude = -123.05
    van_map_chains1 = folium.Map(location=[v_latitude, v_longitude],
                                 zoom_start=10,
                                 tiles='OpenStreetMap')
    van_map_chains2 = folium.Map(location=[v_latitude, v_longitude],
                                 zoom_start=10,
                                 tiles='OpenStreetMap')
    van_map_nchains = folium.Map(location=[v_latitude, v_longitude],
                                 zoom_start=10,
                                 tiles='OpenStreetMap')

    chain1_group = folium.map.FeatureGroup()
    chains1.apply(draw_marker, axis=1, foods=chain1_group, col='red')
    fig = van_map_chains1.add_child(chain1_group)
    fig.save("output_restaurant/chains_in_wikidata.html")

    chain2_group = folium.map.FeatureGroup()
    chains2.apply(draw_marker, axis=1, foods=chain2_group, col='green')
    fig = van_map_chains2.add_child(chain2_group)
    fig.save("output_restaurant/chains_notin_wikidata.html")

    nchain_group = folium.map.FeatureGroup()
    nchains.apply(draw_marker, axis=1, foods=nchain_group, col='blue')
    fig = van_map_nchains.add_child(nchain_group)
    fig.save("output_restaurant/nonchains.html")

    # draw cluster
    van_map_chains_cluster = folium.Map(location=[v_latitude, v_longitude],
                                        zoom_start=10,
                                        tiles='OpenStreetMap')
    van_map_nchains_cluster = folium.Map(location=[v_latitude, v_longitude],
                                         zoom_start=10,
                                         tiles='OpenStreetMap')

    chain_cluster = plugins.MarkerCluster().add_to(van_map_chains_cluster)
    nchain_cluster = plugins.MarkerCluster().add_to(van_map_nchains_cluster)

    chains.apply(draw_cluster, axis=1, foods=chain_cluster)
    fig = van_map_chains_cluster.add_child(chain_cluster)
    fig.save("output_restaurant/chains_cluster.html")

    nchains.apply(draw_cluster, axis=1, foods=nchain_cluster)
    fig = van_map_nchains_cluster.add_child(nchain_cluster)
    fig.save("output_restaurant/nonchains_cluster.html")

    # draw heat map
    van_map_chains_heat = folium.Map(location=[v_latitude, v_longitude],
                                     zoom_start=10,
                                     tiles='OpenStreetMap')
    van_map_nchains_heat = folium.Map(location=[v_latitude, v_longitude],
                                      zoom_start=10,
                                      tiles='OpenStreetMap')

    heatchain = chains[['lat', 'lon']].values.tolist()
    fig = HeatMap(heatchain).add_to(van_map_chains_heat)
    fig.save("output_restaurant/chains_heat.html")

    heatnchain = nchains[['lat', 'lon']].values.tolist()
    fig = HeatMap(heatnchain).add_to(van_map_nchains_heat)
    fig.save("output_restaurant/nonchains_heat.html")

    # stats analysis
    plt.figure(figsize=(12, 7))
    plt.subplot(2, 2, 1)
    plt.hist(chains['lon'])
    plt.title('distribution of chains along lonitude')
    plt.subplot(2, 2, 2)
    plt.hist(nchains['lon'])
    plt.title('distribution of non-chains along lonitude')
    plt.subplot(2, 2, 3)
    plt.hist(chains['lat'])
    plt.title('distribution of chains along latitude')
    plt.subplot(2, 2, 4)
    plt.hist(nchains['lat'])
    plt.title('distribution of chains along latitude')
    plt.plot()
    plt.savefig("output_restaurant/distribution_along_latitude_longitude.jpg")

    c_sample = chains.sample(n=500)
    n_sample = nchains.sample(n=500)

    lon_levene_p = stats.levene(c_sample['lon'], n_sample['lon']).pvalue
    lat_levene_p = stats.levene(c_sample['lat'], n_sample['lat']).pvalue
    print("--------------------statistic data------------------------")
    print("equal varible test:")
    print("longitude p value: ", lon_levene_p)
    print("latitude p value: ", lat_levene_p)

    print("stds: ")
    print("chains longitude std: ", chains['lon'].std(),
          ", non-chains longitude std: ", nchains['lon'].std())
    print("chains latitude std: ", chains['lat'].std(),
          ", non-chains latitude std: ", nchains['lat'].std())

    print("Mann-Whitney Utest:")
    print(
        "longitude p value: ",
        stats.mannwhitneyu(c_sample['lon'],
                           n_sample['lon'],
                           alternative='two-sided').pvalue)
    print(
        "latitude p value: ",
        stats.mannwhitneyu(c_sample['lat'],
                           n_sample['lat'],
                           alternative='two-sided').pvalue)

    print("means:")
    print("chains longitude mean: ", chains['lon'].mean(),
          ", non-chains longitude mean: ", nchains['lon'].mean())
    print("chains latitude mean: ", chains['lat'].mean(),
          ", non-chains latitude mean: ", nchains['lat'].mean())

    # density visualization
    sns.set(style='darkgrid', color_codes=True)
    fig = sns.jointplot(x="lon",
                        y="lat",
                        kind='kde',
                        data=chains,
                        color='red',
                        ratio=6)
    fig.savefig('output_restaurant/chains_kde.png')

    sns.set(style='darkgrid', color_codes=True)
    fig = sns.jointplot(x="lon",
                        y="lat",
                        kind='kde',
                        data=nchains,
                        color='red',
                        ratio=6)
    fig.savefig('output_restaurant/nonchains_kde.png')
    print('Successfully Create HTML Files in folder output_restaurant!')
Esempio n. 3
0
# 데이터 불러오기
import pandas as pd
station_data = pd.read_csv('Station_data.csv', encoding='euc-kr')
station_data = station_data[['주차장명', '위도', '경도']]
station_data = station_data.dropna(axis=0).reset_index()

# 주소, 위도, 경도 크롤링
station_name = station_data['주차장명']
station_lat = station_data['위도']
station_lng = station_data['경도']

# 맵
import folium
map = folium.Map(location=[station_lat.mean(), station_lng.mean()], tiles='stamentoner', zoom_start=8)

# 히트맵1 표시
from folium import plugins
map = map.add_children(plugins.HeatMap(zip(station_lat, station_lng), radius = 8))
map.save('Station_HeatMap1.html')

# 히트맵2 표시
from folium.plugins import HeatMap
map = HeatMap(zip(station_lat, station_lng)).add_to(map)
map.save('Station_HeatMap2.html')
Esempio n. 4
0
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)

# 데이터 불러오기
import pandas as pd
cctv_data = pd.read_csv('CCTV_data.csv', encoding='euc-kr')
cctv_data = cctv_data[['소재지지번주소', '촬영방면정보', '위도', '경도']]
cctv_data = cctv_data.dropna(axis=0).reset_index()

# CCTV 명칭 수정
cctv_data['CCTV'] = cctv_data['소재지지번주소'] + ' ' + cctv_data['촬영방면정보']

# 주소, 위도, 경도 크롤링
cctv_name = cctv_data['CCTV']
cctv_lat = cctv_data['위도']
cctv_lng = cctv_data['경도']

# 맵
import folium
map = folium.Map(location=[cctv_lat.mean(), cctv_lng.mean()], zoom_start=8)

# 히트맵1 표시
from folium import plugins
map = map.add_children(plugins.HeatMap(zip(cctv_lat, cctv_lng), radius = 8))
map.save('CCTV_HeatMap1.html')

# 히트맵2 표시
from folium.plugins import HeatMap
map = HeatMap(zip(cctv_lat, cctv_lng)).add_to(map)
map.save('CCTV_HeatMap2.html')
Esempio n. 5
0
class MapTabWidget(QWidget):
    def __init__(self, main_win):
        super(QWidget, self).__init__(main_win)
        self.main_win = main_win

        self.base_path = os.getcwd()
        self.main_layout = QGridLayout(self)

        self.dock_area = DockArea()
        self.main_layout.addWidget(self.dock_area, 1, 0, 4, 6)

        self.lat_str = 'LATITUDE_ORIGINE'
        self.long_str = 'LONGITUDE_ORIGINE'
        self.csv_path = 'csv_data/remorquages.csv'
        self.lats = None
        self.longs = None
        self.t_span_left = 0
        self.t_span_right = 100
        self.plot_range_left = 0
        self.plot_range_right = 400

        self.map_path = os.path.join(self.base_path, 'montreal_map.html')
        # Select file
        self.create_select_file_form()
        # Settings dock
        self.create_settings_dock()
        # Map
        self.m = self.create_map()
        # View
        self.view_dock = InnerDock(self.main_layout,
                                   'Saving',
                                   b_pos=(2, 0),
                                   toggle_button=False,
                                   size=(40, 40))
        self.create_view()
        # Time span dock
        self.time_span_dock, self.t_plot = self.create_time_span_dock()

        self.setLayout(self.main_layout)

    def create_heat_map(self):
        self.hm_wide = HeatMap(list(zip(self.lats, self.longs)),
                               min_opacity=0.01,
                               radius=37,
                               blur=95,
                               max_zoom=1)
        self.m.add_children(self.hm_wide)
        self.hm_wide.save('heatmap.html')

    def create_settings_dock(self):
        settings_dock = InnerDock(self.main_layout,
                                  'Settings',
                                  b_pos=(0, 1),
                                  toggle_button=True,
                                  size=(1, 1))
        self.dock_area.addDock(settings_dock.dock)
        # Line edit
        form = QGroupBox('')
        f_l = QFormLayout()
        form.setLayout(f_l)
        df_possible_val = ['Latitude field', 'Longitude field', 'Time field']
        self.df_combobox = [QComboBox() for _ in range(len(df_possible_val))]
        for val, cb in zip(df_possible_val, self.df_combobox):
            f_l.addRow(QLabel(f'{val}: '), cb)
            cb.name = val
            cb.activated[str].connect(partial(self.set_cb_val, cb))
        settings_dock.layout.addWidget(form)
        return settings_dock

    def change_t_boundaries(self, r):
        self.t_span_left = int(r.boundingRect().left())
        self.t_span_right = int(r.boundingRect().right())
        print('left: ', self.t_span_left, 'right: ', self.t_span_right)

    def set_cb_val(self, cb, cb_val):
        if cb.name == 'Latitude field':
            self.lat_str = cb_val
        elif cb.name == 'Longitude field':
            self.long_str = cb_val

    def create_time_span_dock(self):
        time_span_dock = InnerDock(self.main_layout,
                                   'Time span',
                                   b_pos=(0, 2),
                                   toggle_button=True,
                                   size=(1, 1))
        self.dock_area.addDock(time_span_dock.dock)
        # Date
        d_axis = DateAxis(orientation='bottom')
        # time plot region
        t_plot = pg.PlotWidget(background=dark_grey,
                               axisItems={'bottom': d_axis})
        t_plot.setXRange(self.plot_range_left, self.plot_range_right)
        t_plot.hideAxis('left')
        # Region
        t_region = pg.LinearRegionItem([self.t_span_right, self.t_span_left])
        t_region.sigRegionChanged.connect(
            partial(self.change_t_boundaries, t_region))
        t_plot.addItem(t_region, ignoreBounds=True)
        # Add date to
        # dates = np.arange(2) * (3600*24*356)
        # t_plot.plot(x=dates, y=[0, 0], symbol='o')

        time_span_dock.layout.addWidget(t_plot)
        return time_span_dock, t_plot

    def create_select_file_form(self):
        # Dock
        opening_dock = InnerDock(self.main_layout,
                                 'Select file',
                                 b_pos=(0, 0),
                                 toggle_button=True,
                                 size=(1, 1))
        self.dock_area.addDock(opening_dock.dock)

        csv_path_edit = QLineEdit('')
        # Buttons
        # Choose map b
        choose_map_file_b = QPushButton('Choose csv data file')
        choose_map_file_b.clicked.connect(partial(self.select_f,
                                                  csv_path_edit))
        # Read csv_data b
        read_header_b = btn('Read csv data',
                            opening_dock.layout,
                            pos=(0, 2),
                            func_conn=self.read_header,
                            color=map_blue_b,
                            txt_color=white)
        # Open csv_data b
        add_data_to_map_b = btn('Add csv data to map',
                                opening_dock.layout,
                                pos=(0, 3),
                                func_conn=self.refresh_map,
                                color=map_blue_b,
                                txt_color=white)
        # add_data_to_map_b.clicked.connect( self.refresh_map)
        # Add to layout
        opening_dock.layout.addWidget(choose_map_file_b, 0, 0)
        opening_dock.layout.addWidget(csv_path_edit, 0, 1)
        # .addWidget(add_data_to_map_b, 0, 2)

    def select_f(self, csv_path_edit):
        f_name = select_file(self.main_win, open=True, f_extension='.csv')
        csv_path_edit.setText(f_name)
        self.csv_path = f_name

    def refresh_map(self):
        self.create_map()
        self.add_data_to_map()
        # Heat map
        self.create_heat_map()
        self.create_view(refresh=True)
        try:
            self.time_span_dock.dock.close()
        except AttributeError as e:
            print('Error', e)
        self.time_span_dock, self.t_plot = self.create_time_span_dock()

    def create_map(self):
        m = folium.Map(location=[45.5088, -73.554],
                       tiles='Stamen Toner',
                       zoom_start=12,
                       control_scale=True)
        m.save('mtl_map.html')
        return m

    def create_combobox(self, df_vals):
        for cb in self.df_combobox:
            for val in df_vals:
                cb.addItem(val)

    def read_header(self):
        remorquage_csv = pd.read_csv(self.csv_path)
        remorquage_df = pd.DataFrame(remorquage_csv)
        df_vals = remorquage_df.columns.values
        self.create_combobox(df_vals)

    def read_data(self):
        remorquage_csv = pd.read_csv(self.csv_path)
        remorquage_df = pd.DataFrame(remorquage_csv)
        self.lats = np.array(
            remorquage_df[self.lat_str])[self.t_span_left:self.t_span_right]
        self.longs = np.array(
            remorquage_df[self.long_str])[self.t_span_left:self.t_span_right]

    def add_data_to_map(self):
        self.read_data()
        for lat, long in zip(self.lats, self.longs):
            try:
                folium.Marker([lat, long]).add_to(self.m)
            except ValueError as e:
                pass
        self.m.save('mtl_map.html')

    def create_view(self, refresh=False):
        view = QtWebEngineWidgets.QWebEngineView()
        view.load(QtCore.QUrl().fromLocalFile(
            os.path.join(self.base_path, 'mtl_map.html')))
        if refresh == True:
            view.load(QtCore.QUrl().fromLocalFile(
                os.path.join(self.base_path, 'heatmap.html')))
        self.view_dock.layout.addWidget(view, 0, 0)
        self.dock_area.addDock(self.view_dock.dock)