Как определить условный оператор для цвета точек рассеяния на основе двух факторов? - PullRequest
1 голос
/ 17 января 2020

На этой неделе я начал с Python и Da sh, так как мне не терпится выучить оба.

Моя цель: Я хочу выделить определенные точки, которые обнаруживаются датчиками, и покрасить их красный , если они удовлетворяют двум условиям:

  • Если они обнаружены в период с 01:00 до 05:00
  • и обнаружены в определенной зоне (предположим, что у меня есть список с вероятностью риска для каждой зоны). Поэтому следует учитывать любой риск, превышающий 0,6.

Предполагаемое условие для окраски:

IF x> 1 И x <5 И риск [i]> 0.6 THEN color = red, В противном случае listCoords.index.hour

Мой вопрос: Как часть color=np.append(np.insert(listCoords.index.hour, 0, 0), 23) моего кода должна измениться, чтобы достичь моей цели? Я думал что-то вроде (пока не включая список рисков):

color=np.where(np.logical_and(listCoords.index.hour >= 1, listCoords.index.hour <= 5),
np.append(np.insert(listCoords.index.hour, 0, 0), 23), 'red')

Но это не работает. Любая помощь очень ценится.

Фрагмент моего кода: разброс точек на географической карте:

return go.Figure(
    data=[
        # Data for all observations based on date/time
        Scattermapbox(
            lat=listCoords["Lat"],
            lon=listCoords["Lon"],
            mode="markers",
            hoverinfo="text + lat + lon",
            text=listCoords.index.hour,
            marker=dict(
                showscale=True,  
                color=np.append(np.insert(listCoords.index.hour, 0, 0), 23),
                opacity=0.5,
                size=5,
                colorscale=[
                    [0, "#F4EC15"],
                    [0.04167, "#DAF017"],
                    [0.0833, "#BBEC19"],
                    [0.125, "#9DE81B"],
                    [0.1667, "#80E41D"],
                    [0.2083, "#66E01F"],
                    [0.25, "#4CDC20"],
                    [0.292, "#34D822"],
                    [0.333, "#24D249"],
                    [0.375, "#25D042"],
                    [0.4167, "#26CC58"],
                    [0.4583, "#28C86D"],
                    [0.50, "#29C481"],
                    [0.54167, "#2AC093"],
                    [0.5833, "#2BBCA4"],
                    [1.0, "#613099"],
                ],
                colorbar=dict(
                    title="Time of<br>Day",
                    x=0.93,
                    xpad=0,
                    nticks=24,
                    tickfont=dict(color="#d8d8d8"),
                    titlefont=dict(color="#d8d8d8"),
                    thicknessmode="pixels",
                ),
            ),
        ),

РЕДАКТИРОВАНИЕ 1: предоставление образцов данных, чтобы люди может запустить его:

Список некоторых обнаружений датчиков с их отметкой даты / времени:

**Date/Time          Lat                 Lon**
2019-03-25 00:05:00 -10,80948998827914  24,19160777427344  
2019-03-25 00:10:00 -10,79868405083584  24,16288145431259
2019-03-25 04:05:00 -10,78688335083584  24,20288145431259
2019-03-25 04:05:00 -10,77558405083584  24,288145431259

Список зон и вероятность их риска :

ZoneRisk_Prob          Zone
0                       1
0                       2
0,002394936420140275    3
0,030364372469635626    4
0,00005702229571762559  5
0                       6
0,039345384045161656    7
0,10164224211666761     8
0,14854308034441466     9
0,0037064492216456633   10
0                       11
0                       12
0,0003421337743057536   13
0,1214289787306837      14
0,04410674573758339     15
0                       16
0                       17
0,0158236870616411      18
0                       19
0,18951359981752866     20
0,0014825796886582653   21
0,0005417118093174431   22
0,027769858014483662    23
0,014027484746535895    24
0,0012259793579289502   25
0,029737127216741745    26
0,009636767976278725    27
0,060072988538518564    28
0,043051833266807324    29
0,005759251867480185    30
0,1094257854821235      31

1 Ответ

1 голос
/ 18 января 2020

Чтобы получить позиции, которые удовлетворяют обоим вашим требованиям, вы должны действовать следующим образом.

Считайте два файла данных, которые должны быть синхронизированы, в том смысле, что дата-время записана в строке k даты-времени. file, соответствует расположению координат (lon, lat) в номере строки k другого файла.

dfz = pd.read_csv("zone-file.csv")
probs = dfz['ZoneRisk_Prob'].values
I = np.where(probs > 0.6)[0]
print(I)
dft = pd.read_csv("record-datetime.csv") #supose that this dataframe has Date/Time as index

#extract the list of datetimes between two fixed hours:

time_red = dft.between_time('01:00', '05:00').index
print(time_red)

#get the row number in dft.index of each element in  time_red

row_nr = [list(df.index).index(tr) for tr in time_red]
print(row_nr)

#extract the common elements in I and row_nr:

red_position = set(I).intersection(set(row_nr))

Если, например, red_position = [7,12, 17, 25], то цвет [7], цвет [12], цвет [17], цвет [25] будет красным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...