Quantcast
Channel: 🎛️ Dash - Plotly Community Forum
Viewing all articles
Browse latest Browse all 6271

The problem with displaying data on a world map from a database

$
0
0

@AndreyGl wrote:

When loading data from a csv file, data is displayed correctly, but when i using the same data, but from the database, there is a problem with displaying data on a world map. Analysis of other data and graphing is correct. I tried changing the data type of coordinates, but it didn’t affect. Maybe I’m missing something explicit, but i still an inexperienced user.
This is how I get data from the csv:

terrorism = pd.read_csv('F:/data/terrorism-analysis/apps/data/globalterrorism.csv',
                        encoding='latin-1', low_memory=False, 
                        usecols=['iyear', 'imonth', 'iday', 'country_txt', 'city', 'longitude', 'latitude', 
                       'nkill', 'nwound', 'summary', 'target1', 'gname'])

And this is how I get data from the database:

connection = pymysql.connect(host='localhost',
                             user='root',
                             password='*****',                             
                             db='terrorism_bd',
                             charset='utf8mb4')
try:
    sql = "SELECT iyear, imonth, iday, country_txt, city, longitude, latitude, nkill, nwound, summary, target1, gname FROM maintable "
    terrorism = pd.read_sql(sql, connection)              
finally:      
    connection.close()

In the case of using data from the database when choosing a country to display on the world map (in my case, terrorist acts and their coordinates), the following error is displayed:

127.0.0.1 - - [23/Jan/2020 02:16:53] "POST /_dash-update-component HTTP/1.1" 200 -
127.0.0.1 - - [23/Jan/2020 02:16:59] "POST /_dash-update-component HTTP/1.1" 200 -
[2020-01-23 02:16:59,103] ERROR in app: Exception on /_dash-update-component [POST]
Traceback (most recent call last):
  File "C:\Users\Andrey\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\Andrey\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\Andrey\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\Andrey\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
 ...
  File "C:\Users\Andrey\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask\app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\Andrey\AppData\Local\Programs\Python\Python37-32\lib\site-packages\dash\dash.py", line 1404, in dispatch
    response.set_data(self.callback_map[output]["callback"](*args))
  File "C:\Users\Andrey\AppData\Local\Programs\Python\Python37-32\lib\site-packages\dash\dash.py", line 1284, in add_context
    output_value = func(*args, **kwargs)  # %% callback invoked %%
  File "f:\data\terrorism-master\apps\world.py", line 144, in countries_on_map
    for c in countries],
  File "f:\data\terrorism-master\apps\world.py", line 144, in <listcomp>
    for c in countries],
  File "f:\data\terrorism-master\apps\world.py", line 132, in <listcomp>
    'data': [go.Scattergeo(lon=[x + random.gauss(0.04, 0.03) for x in df[df['country_txt'] == c]['longitude']],
TypeError: can only concatenate str (not "float") to str

Another piece of code referenced by the error:

@app.callback(Output('map_world', 'figure'),
             [Input('countries', 'value'), Input('years', 'value')])
def countries_on_map(countries, years):
    df = terrorism[terrorism['country_txt'].isin(countries) & terrorism['iyear'].between(years[0], years[1])]
    
    return {
        'data': [go.Scattergeo(lon=[x + random.gauss(0.04, 0.03) for x in df[df['country_txt'] == c]['longitude']],
                               lat=[x + random.gauss(0.04, 0.03) for x in df[df['country_txt'] == c]['latitude']],
                               name=c,
                               hoverinfo='text',
                               marker={'size': 9, 'opacity': 0.65, 'line': {'width': .2, 'color': '#cccccc'}},
                               hovertext=df[df['country_txt'] == c]['city'].astype(str) + ', ' + df[df['country_txt'] == c]['country_txt'].astype(str)+ '<br>' +
                                         [dt.datetime.strftime(d, '%d %b, %Y') for d in df[df['country_txt'] == c]['date']] + '<br>' +
                                         'Perpetrator: ' + df[df['country_txt'] == c]['gname'].astype(str) + '<br>' +
                                         'Target: ' + df[df['country_txt'] == c]['target1'].astype(str) + '<br>' + 
                                         'Deaths: ' + df[df['country_txt'] == c]['nkill'].astype(str) + '<br>' +
                                         'Injured: ' + df[df['country_txt'] == c]['nwound'].astype(str) + '<br><br>' + 
                                         ['<br>'.join(textwrap.wrap(x, 40)) if not isinstance(x, float) else '' for x in df[df['country_txt'] == c]['summary']])
                 for c in countries],
        'layout': go.Layout(title='Terrorist Attacks ' + ', '.join(countries) + '  ' + ' - '.join([str(y) for y in years]),
                            font={'family': 'Palatino'},
                            titlefont={'size': 22},
                            paper_bgcolor='#eeeeee',
                            plot_bgcolor='#eeeeee',
                            width=1420,
                            height=650,
                            annotations=[{'text': 'Data: START Consortium', 'x': .2, 'y': -.13, 'showarrow': False}],                            
                            geo={'showland': True, 'landcolor': '#eeeeee',
                                 'countrycolor': '#cccccc',
                                 'showsubunits': True,
                                 'subunitcolor': '#cccccc',
                                 'subunitwidth': 5,
                                 'showcountries': True,
                                 'oceancolor': '#eeeeee',
                                 'showocean': True,
                                 'showcoastlines': True, 
                                 'showframe': False,
                                 'coastlinecolor': '#cccccc',
                                 'lonaxis': {'range': [df['longitude'].min()-1, df['longitude'].max()+1]},
                                 'lataxis': {'range': [df['latitude'].min()-1, df['latitude'].max()+1]}
                                              })
    }

Please help me figure out what the error is and how to solve it.

Posts: 3

Participants: 2

Read full topic


Viewing all articles
Browse latest Browse all 6271

Trending Articles