С функцией rankdata
:
from scipy.stats import rankdata
df.rolling(5).apply(lambda x: rankdata(x)[-1])
Выход:
a
0 NaN
1 NaN
2 NaN
3 NaN
4 3.0
5 1.0
6 5.0
7 4.0
...
Вам не важен тип подключения пользователя, вам важна скорость загрузки .
Имейте крошечное флэш-приложение, которое загружает оставшуюся часть флэш-памяти и время, необходимое для этого. Или HTML-страницу, в которой указано, сколько времени занимает загрузка Ajax.
Если загрузка многофункционального приложения занимает слишком много времени, перенаправьте изначально загруженную заглушку / флэш-страницу на страницу медленной загрузки (или загрузите обычные файлы). флэш-приложение или что-то еще).
Самый простой и надежный механизм, вероятно, состоит в том, чтобы заставить пользователя выбрать тип соединения из выпадающего списка. Просто, я знаю, но это может спасти вас от горя!
Вот небольшой фрагмент кода из кода, который пытался что-то подобное. Это в C #, но оно довольно короткое, и это просто интересная концепция.
Определение скорости соединения вашего клиента
Конечно, это может быть временная проблема со скоростью, которая не имеет ничего общего с соединением пользователя в время тестирования и т. д. и т. д.
У меня была похожая проблема пару лет назад, и я просто позволил пользователю выбирать между сайтами с высокой и низкой пропускной способностью. Первым, что я загрузил на страницу, была эта опция, чтобы они могли двигаться быстрее.
Нет способа отличить широкополосный или коммутируемый доступ в качестве типа соединения, но вы можете сделать обоснованное предположение по скорости соединения.
Gmail делает это и предоставляет ссылку на базовую HTML-версию своего сервиса, если они его обнаружат.
(источник: nirmaltv.com )
Я предполагаю, что есть какой-то клиент боковой опрос javascript сделан на AJAX-запросах. Если время оборота превышает пороговое значение, появляется возможность переключения на «lite».
Лучшая часть этой опции - то, что вы позволяете пользователю выбирать , если они хотят использовать версию lite вместо заставить их.
Я думаю, что типичный подход к этому - просто спросить пользователя. Если вы не уверены, что ваши пользователи предоставят точный ответ, я подозреваю, что вам придется написать приложение, которое запускает тест скорости на клиенте. Обычно они записывают, сколько времени требуется клиенту для получения x количества байтов, и используют это для определения пропускной способности.
Actionscript 3 имеет библиотеку, которая поможет вам в этой задаче, но я считаю, что для этого требуется развернуть ваш flex / flash приложение на Flash Media Server. Подробности см. В Обнаружение собственной пропускной способности ActionScript 3.0 .
@Apphacker (I'd comment instead of answering if I had enough reputation...):
Can't guarantee the reverse, either--I have Earthlink dial-up, soon to upgrade to Earthlink DSL (it's what's available here...).
вы можете ...
Я думаю, что тест скорости должен быть достаточным.
Если у вас есть только небольшая известная группа пользователей, иногда возможно определить скорость соединения по ip. (Некоторые провайдеры назначают разные подсети для коммутируемых / широкополосных подключений)
Вы можете проверить их IP и посмотреть, разрешается ли он для / назначен провайдеру удаленного доступа, такому как AOL, Earthlink, NetZero. Не гарантирует, что те, кто не разрешит такого поставщика, являются пользователями широкополосного доступа.