Бабушка, смотри, я сделал двач! Войти !bnw Сегодня Клубы
УНЯНЯ. У нас есть немножечко инфы об этом пользователе. Мы знаем, что он понаписал, порекомендовал и даже и то и другое сразу. А ещё у нас есть RSS.
Теги: Клубы:

По приезду на Таити не таите тёти тити, нету повода таить на Таити тётям тить.
#571DKJ (0+2) / @anonymous / 2627 дней назад

@je
Рекомендую для выбора съемного жилья заюзать google maps api distance matrix. У меня, например, собран список более менее рандомных мест, в которые я могу ходить. Я считаю с помощью google maps api, сколько из разных потенциальных жилищ я буду в среднем времени тратить в пути (либо с коэффициентами, например огромный коэффициент для места работы и маленький для любимого наркопритона, либо поровну) и строю таблицу для всех потенциальных квартир:

  • велосипедом

  • общественный транспорт, меньше всего пересадок (самый нормальный режим для гугл мапс по Москве)

  • только метро, мцк и поезда, потому что наземный транспорт в Москве слишком рандомно ходит

Код, который придется почитать, чтобы как-нибудь использовать. Строит таблички со среднем временем в пути в месяц для каждой квартиры и это же время, конвертированное в рубли (умноженное на константу)

#!/usr/bin/env python3
import pandas as pd
import googlemaps
import pytz

from collections import namedtuple
from pprint import pprint
from itertools import chain, repeat
from datetime import datetime, tzinfo
from functools import partial

gmaps = googlemaps.Client(key='AREDACTEDREDACTEDREDACTED')

# ЗАПОЛНИТЬ: сюда следует ввести адреса потенциальных мест, где я буду жить
# каждое значение может быть либо строкой с адресом, либо GPS координатами
home_addresses = [
    "Россия, Москва, ул. Усачева, 29к3",
    "Россия, Москва, ул. Беговая, 17к1",
    "Россия, Москва, Коптевская ул., 83к2",
    "Россия, Москва, ул. Степана Супруна, 3-5",
    "Россия, Москва, Новокузнецкая ул., 13/15",
    "Россия, Москва, Бутырская ул., 86Б",
    "Россия, Москва, ул. Правды, 6/34",
    "Россия, Москва,  ул. Зои и Александра Космодемьянских, 11А",
    "Россия, Москва, Ленинградский просп., 78К1",
    "Россия, Москва, Новокузнецкая ул., 13С1",
    "Россия, Москва, Севастопольский просп., 5АК1",
    "Россия, Москва, ул. 1812 года, 4/45К2",
    "Россия, Москва, Светлый проезд, 4К4",
    "Россия, Москва, Делегатская ул., 14/2",
    "Россия, Москва, ул. Маршала Рыбалко, 3",
]


# In[31]:

# ЗАПОЛНИТЬ: сюда следует ввести пары вида: 
# (адрес часто посещаемого места, период как часто вы будете добираться туда-обратно между домом и этим местом)
#
# первое значение может быть либо строкой с адресом, либо GPS координатами
#
# если второе значение например 8, это значит,
# что раз в 8 дней я езжу туда и обратно домой.
# если у вас есть место, куда вы ездите раз в 7 дней, но оттуда
# всегда едете еще куда-то, то ставьте значение 14

favorite_places = [
    ("Россия, Москва, ул. Кузнецкий Мост, 13"),  # habimoshka
    ("Россия, Москва, ул.Большая Дорогомиловская, д.5 к.2"),  # кочерга
    ("Россия, Москва, Хохловский пер, 7/9 стр 2"),  # neuron hackspace
    ("Россия, Москва, Бобров пер. 6 стр. 1, 2"),  # библиотека тургенева
    ("Россия, Москва, Милютинский пер., 19/4, стр.1"),  # зеленая дверь
    ("Россия, Москва, шелапутинский переулок, д. 6"), # swing-in-moscow
    ((55.737924, 37.620204)), # рандомный дом в центре
    ("Россия, Москва, Ленинградское шоссе, 39Ас3"), # рандомная потенциальная работа - касперский
    ("Россия, Москва, Кожевническая улица, 7"), # рандомная работа
    ("Россия, Москва, Нижний Сусальный переулок, 5с19"), # рандомная работа
    ("Россия, Москва, ул. Волочаевская, д. 5, корп. 1"), # рандомная работа - крок
    ("Россия, Москва, ул. Летниковская, 10, стр. 5"), # рандомная работа
    ("Россия, Москва, Лесная улица, 7"), # рандомная работа - авито
    ("Россия, Москва, пр-т Андропова, д. 18, корп. 1"), # рандомная работа
    ("Россия, Москва, Дмитровское шоссе, 157с5"), # рандомная работа
    ("Россия, Москва, Трубная улица, 23-2"), # ранд работа
    ("Россия, Москва, Никопольская улица, 4"), # рандом работа
    ("Россия, Москва, улица Ленинская Слобода, 19"), # рандомная работа
    "Москва, ул. Малая Юшуньская, д. 1 к2",  # locus solus
    "Москва, метро Римская",  # предел
    "Москва, Образцова, 14"  # msds
]
favorite_places = list(zip(
    favorite_places,
    repeat(len(favorite_places) / (2 * 4.5 / 7))))


def calc_avg_travel(home_addresses, favorite_places,
                    how: str, depart_when: datetime):
    request_funcs = {
        "bike": partial(gmaps.distance_matrix, mode="bicycling"),
        "car": partial(gmaps.distance_matrix, mode="driving"),
        "walking": partial(gmaps.distance_matrix, mode="walking"),
        "subway_train": partial(
            gmaps.distance_matrix, mode="transit",
            transit_mode=["subway", "train"],
            transit_routing_preference="fewer_transfers"),
        "public_transport": partial(
            gmaps.distance_matrix, mode="transit",
            transit_routing_preference="fewer_transfers")}
    assert how in request_funcs.keys()
    favorite_places = [{"location": location, "period_in_days": period_in_days}
                       for location, period_in_days in favorite_places]
    location_col = []
    duration_col = []
    home_address_col = []
    period_in_days_col = []
    for home in home_addresses:
        result = request_funcs[how](
            [home], [place["location"] for place in favorite_places],
            departure_time=depart_when)
        assert result["status"] == "OK"
        assert len(result["destination_addresses"]) == len(favorite_places)
        assert len(result["origin_addresses"]) == 1

        location_col += result["destination_addresses"]
        duration_col += [record["duration"]["value"] for record in result["rows"][0]["elements"]
                         if record["status"] == "OK"]
        home_address_col += [result["origin_addresses"][0]] * len(result["destination_addresses"])
        period_in_days_col += [place["period_in_days"] for place in favorite_places]

    data = pd.DataFrame({
        "location": location_col, "duration": duration_col,
        "home_address": home_address_col, "period_in_days": period_in_days_col
    })

    data["duration_per_day"] = data.duration / data.period_in_days
    return data

DEPARTURE_TIME = datetime(2017, 9, 5, 12, 0, tzinfo=pytz.utc) # сейчас указано в UTC. Москва это UTC+3

# a dumb test, kinda
def test_gmaps_api():
    home_addresses = [
        "Россия, Москва, Коптевская ул., 83к2",
        "Россия, Москва, ул. Степана Супруна, 3-5"
    ]
    destination_addresses = zip(home_addresses, [1, 3])
    data = calc_avg_travel(home_addresses, destination_addresses,
                           "public_transport", DEPARTURE_TIME)
    print(data)
    durations = data["duration"]
    assert durations.iloc[0] == 0
    assert durations.iloc[1] != 0
    assert durations.iloc[2] != 0
    assert durations.iloc[3] == 0

test_gmaps_api() # yeah it works


data = calc_avg_travel(home_addresses, favorite_places,
                       "subway_train", DEPARTURE_TIME)


unique_home_addresses = pd.DataFrame(pd.Series(data["home_address"].unique()).rename("address_by_google"))
unique_home_addresses["input_home_address"] = home_addresses
print(unique_home_addresses)
# ВАЖНО: проверьте в этой табличке, что в колонке address_by_google стоит адрес,
# понятый гуглом правильно (изначальные адреса - в колонке input_home_address)


# In[62]:

unique_destination_addresses = pd.DataFrame(pd.Series(data["location"].unique()).rename("address_by_google"))
unique_destination_addresses["input_favorite_place"] = [str(pair[0]) for pair in favorite_places]
print(unique_destination_addresses)
# ВАЖНО: проверьте в этой табличке, что в колонке address_by_google стоит адрес,
# понятый гуглом правильно (изначальные адреса - в колонке input_favorite_place)


# In[63]:

print(data.head())
print(data.tail())
# ЗАМЕЧАНИЕ: здесь будут просто показаны конец и начало получившейся таблицы
# Если не лень, можете посмотреть, чтобы каких-то неадекватных значений не было
# duration - время чтобы добраться от места до места в секундах
# period_in_days - тот самый указанный выше период в днях
# duration_per_day - кол-во секунд в день


# In[64]:

# calculate travel time per day for each home address

travel_times_per_day_per_home = pd.DataFrame(
    (data.groupby("home_address")["duration_per_day"].sum() / 60)
    .rename("minutes_of_travel_per_day")
).sort_values(by="minutes_of_travel_per_day")
print(travel_times_per_day_per_home)
# ВАЖНО: это финальный результат
# для каждого адреса квартиры в другой колонке будет указано кол-во минут, затрачиваемых на дорогу, в день
# адреса будут отсортированы от самых выгодных по времени в дороге до самых невыгодных


# In[65]:

COST_PER_HOUR = 340  # RUR
costs = travel_times_per_day_per_home     .assign(hours_per_month=lambda df: (df["minutes_of_travel_per_day"] * 30.5 / 60).round(1))     .assign(converted_rur_per_month=lambda df: df["hours_per_month"] * COST_PER_HOUR)

print(costs)
#UVGF8R (19+6) / @cat-o-nine-tails / 2635 дней назад
Купил станок бу, буду теперь пердолить. Для начала нужно вернуть на место проёбанный крепёж, залепить соплями полуразвалившуюся электрику, заменить щётки шпинделя и нахуярить литола везде. // https://www.avito.ru/moskva/oborudovanie_dlya_biznesa/frezerno-gravirovalnyy_stanok_s_chpu_935457211
#5Z5HBE (15+2) / @l29ah / 2637 дней назад
Гаражная Академия пана Ляха объявляет набор на новый 2017-2018 учебный год. По дисциплинам: 1. Ссаньё в рюкзаки 2. Гаражная прокрастинация 3. Житие в шерсти как оно есть 4. Ходим в горы 5. Паяльники и лигерады 6. УМННБТ 7. Не открывайте двери Стоимость семестра 1ВТС, количество мест ограничено площадью гаража. Спешите не упустить свой шанс! Ваше будущее в ваших руках! Запись на обучение по адресу: l29ah@bitcheese.net
#8IL2WG (12+6) / @anonymous / 2637 дней назад
tfw
Сегодня я настолько пустое место, что на меня не реагировал даже датчик автоматической двери в магазе.
#K0J2VN (0+1) / @anonymous / 2658 дней назад
http://radiooooo.com/ прикольна
#JB6YK4 (0+2) / @anonymous / 2660 дней назад
Поддался значит на троллинг бнвачей о вкусной и здоровой пище и пошёл в Ленту с целью закупить чего-нибудь /вкусненького/, не требующего пердольного приготовления. Погуляв по ней был неприятно удивлён: * выпечки без сахара не бывает; * продукты "для диабетиков" содержат моносахариды; * все соки нижне-среднего ценового диапазона содержат добавленный сахар, кроме томатного (содержащего соль); * ржаного хлеба не бывает; * сладостей без моно- и дисахаридов не бывает; * лимонада без углекислоты не бывает; * пюре-полуфабрикаты содержат транс-жиры. В итоге купил морковку и несколько разных бомж-пакетов, вернулся домой и выбираю ароматизаторы для мюслей в магазине для качков, грызя морковку, по вкусу напоминающую траву.
#OC411U (58+5) / @l29ah / 2660 дней назад
bnw
Посоны, а есть способ читать бнвачик через matrix? По сути, уже все, кто мне нужен, кроме бнв, перебрались туда. Транспорт в хмрр пока недоделан, веб-версию не хотет.
#BKJ0LN (7+1) / @dulo_t-34 / 2665 дней назад
#Z8G0WF (9+3) / @figli / 2671 день назад
#RZ8OC6 (0+4) / @anonymous / 2674 дня назад
#INQLCJ (1+1) / @anonymous / 2675 дней назад
Топ рыночных профессий 2017: 1. Видеоблоггер 2. Инстаграм - шлюха 3. Медиаблядь 4. Повар 5. Диджей а ты и дальше сиди ковыряйся в своих левацких конплюктирах ЖМУ ПИНУС ШВАБОДКА ПИТУХИ КОКОКО ЖАБИР КОКОКО
#GRE3D4 (0+1) / @anonymous / 2677 дней назад
>ПриватБанк предложил государству корпоративные системы на базе PrivatLinux http://minfin.com.ua/2017/06/29/28648501/
#6DGC60 (0+1) / @hate-engine / 2696 дней назад
#QDX8I5 (14+6) / @anonymous / 2719 дней назад
YYY (16:32:52 1/02/1962) Устройство для искусственного согревания части тела Подсказка: г*е*ка Возможный бонус: 498 руб. XXX (16:33:10 1/02/1962) гречка
#5T40C0 (0+1) / @anonymous / 2721 день назад

По техническим причинам (связанным с разборкой хитаги и частичным складыванием в рюкзак наиболее полезных деталей) интернет лишился одного из важнейших core-узлов обеспечивающих бнвачеров и реддитеров аудионаркотиками, а так же внесшего свой вклад в развитие финансовых Blockchain технологий, помогая инвесторам принимать верные решения на основе передовой диванной аналитики на рубях
На протяжении последнего года сервис был размещен на известной хостинг-площадке Sycharnya Hackspace. Хочу отметить либеральную политику сервиса, высокую стабильность (электричество отключается всего раз в месяц), отличное сетевое ядро (анальный нат на микротике в котором хуево работает DNAT), а так же высококвалифицированную и оперативную техподдержку (гринбостод ребутнет когда проснется или доедет до дома, если не забудет).
Ориентировочный срок восстановления сервиса - середина-конец июня // либо я раздобуду USB-SATA, воткну хард с музякой в роутер и все интернеты будут сосать ее через трижэ.

#SE317G (0+6) / @lexszero / 2728 дней назад
Привет бнвахи, раз 10 пересмотрел и вам рекомендую. https://www.youtube.com/watch?v=rK6mW_wKGC4
#DF31ER (1+2) / @jahfhar / 2735 дней назад
--
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.