Что-то про РОИ. API?

Общие вопросы о roi.ru и системе интернет-демократии
Правила форума
1) Администрация портала oroi.ru обязуется сохранять политический нейтралитет во всём.
2) Запрещено нарушать законодательство РФ.
3) Пожалуйста, будьте вежливы. На форуме принято "обращение на Вы".

Что-то про РОИ. API?

Сообщение Гость » 13 ноя 2013, 22:09

Кто тут спец в IT? Про что страница? https://github.com/ivbeg/apiroi/blob/ma ... stats.json

apiroi / scripts / data / refined / vote_throttle_stats.json
Код: Выделить всё
[
    {
        "value": 0.00020176087617842188,
        "key": "http://roi.ru/poll/petition/chinovniki-i-gos-uslugi/pensionnaya-reforma-perehod-na-adresnuyu-podderzhku-pensionerov/"
    },
Гость
 


Re: Что-то про РОИ. API?

Сообщение taurus » 13 ноя 2013, 22:19

autor_id - идентификатор пользователя разместившего петицию

Grammar Nazi негодуэ
taurus
Эксперт IT
 
Сообщения: 875
Зарегистрирован: 01 авг 2013, 00:28

Re: Что-то про РОИ. API?

Сообщение Гость » 13 ноя 2013, 22:43

Нашел в описании:
apiroi
Open API for Russian government e-petitions project - ROI.RU
Гость
 

Re: Что-то про РОИ. API?

Сообщение Гость » 13 ноя 2013, 22:55

Еще нашел там файлик со всеми петициями, пока не разобрался, выложу тут.
Вложения
petitions_02112012.xls.zip
(2.35 МБ) Скачиваний: 106
Гость
 

Re: Что-то про РОИ. API?

Сообщение Гость » 13 ноя 2013, 22:57

Интересно, что бы это значило? Из служебных файлов:
petition_type number
проходят барьер в 100 тысяч голосов 6
от 50 до 100 тысяч голосов 5
от 10 до 50 тысяч голосов 74
от 1 до 10 тысяч голосов 775
до 1 тысячи голосов 1644

Это же петиции? Тогда от куда информация, что проходят барьер 100000 голосов именно 6 петиций?

и ещё интересный код
#!/usr/bin/env python
# coding: utf8
"""
ROI.ru data processor
"""
import csv
import json
import os, os.path
from urllib import urlopen, unquote_plus, urlencode
import urllib2
from BeautifulSoup import BeautifulSoup, BeautifulStoneSoup
import time

from urlparse import urljoin
from StringIO import StringIO
from datetime import datetime
from pymongo import Connection
from bson import json_util
BASE_URL = 'http://roi.ru'
RAW_PATH = 'data/raw'
REFINED_PATH = 'data/refined'

MONGO_SERVER = 'localhost'
MONGO_PORT = 27017
MONGO_DB = 'roi'
PETITIONS_COLL = 'petitions'
PETFULL_COLL = 'petitions_full'
VOTEHISTORY_COLL = 'votehistory'
PROBE_COLL = 'probe'

class DataProcessor:
"""Data processor for ROI"""

def __init__(self):
self.conn = Connection(MONGO_SERVER, MONGO_PORT)
self.db = self.conn[MONGO_DB]
self.petcoll = self.db[PETITIONS_COLL]
self.probecoll = self.db[PROBE_COLL]
pass

def calc_votes_stats_by_field(self, fieldname):
items = {}
for p in self.petcoll.find():
key = p[fieldname]
value = int(p['votes'])
v = items.get(key, 0)
items[key] = v + value
return items

def _save_stats(self, filename, data):
items = []
for k, v in data.items():
items.append({'key': k, 'value': v})
self.save_as_json(filename, items)

def save_as_json(self, filename, items):
f = open(filename, 'w')
json.dump(items, f, indent=4, default=json_util.default)
f.close()

def calc_votes_stats(self):
self._save_stats(REFINED_PATH + '/autor_stats.json' , self.calc_votes_stats_by_field('autor_id'))
self._save_stats(REFINED_PATH + '/topic_stats.json' , self.calc_votes_stats_by_field('topic_id'))
self._save_stats(REFINED_PATH + '/jurisdiction_stats.json' , self.calc_votes_stats_by_field('jurisdiction'))
self._save_stats(REFINED_PATH + '/vote_throttle_stats.json' , self.calc_votes_throttle())
self._save_stats(REFINED_PATH + '/vote_predict_stats.json' , self.calc_votes_predict())
self.save_as_json(REFINED_PATH + '/vote_predict_by_probe.json' , self.calc_votes_by_probe())

def calc_votes_throttle(self):
items = {}
for p in self.petcoll.find():
delta = p['probe_date'] - p['start_date']
seconds = delta.total_seconds()
value = int(p['votes'])
items[p['url']] = float(value * 100.0 / seconds)
return items

def calc_votes_predict(self):
items = {}
for p in self.petcoll.find():
delta = p['probe_date'] - p['start_date']
seconds = delta.total_seconds()
value = int(p['votes'])
throttle = float(value * 100.0 / seconds)
delta2 = p['end_date'] - p['probe_date']
seconds2 = delta2.total_seconds()
votes2 = (throttle / 100.0) * seconds2
items[p['url']] = votes2 + value
return items

def calc_votes_by_probe(self):
items = []
for p in self.petcoll.find():
num = self.probecoll.find({'slug': p['slug']}).count()
if num < 2:
continue
for v in self.probecoll.find({'slug': p['slug']}):
print v
print '---'
first = self.probecoll.find({'slug': p['slug']}).sort('probe_date', -1)[0]
last = self.probecoll.find({'slug': p['slug']}).sort('probe_date', 1)[0]
timedelta = first['probe_date'] - last['probe_date']
votedelta = int(first['votes']) - int(last['votes'])
seconds = timedelta.total_seconds()

if seconds == 0: continue
throttle = float(votedelta) / seconds
daythrottle = throttle * 60*60*24
timedelta2 = p['end_date'] - first['probe_date']
seconds2 = timedelta2.total_seconds()
votes2 = throttle * seconds2
predict = int(p['votes']) + votes2
print 'Predict', predict, 'added', votes2

items.append({'slug' : p['slug'], 'name' : p['name'], 'url' : p['url'], 'throttle' : daythrottle, 'votes' : p['votes'], 'predicted' : predict})
return items

if __name__ == "__main__":
ext = DataProcessor()
ext.calc_votes_stats()

и пояснение
API для РОИ
API для Российской общественной инициативы http://www.roi.ru

Цель
Обеспечить непрерывный мониторинг Российской общественной инициативы и раскрытие информацие по истории голосования в машиночитаемом виде.

Текущий статус
Данные выгружены за 2 ноября 2013 года - http://hubofdata.ru/dataset/roi-dump
Дорабатывается скрипт регулярного обновления данных.
Основные понятия
Объекты

petition - петиция (инициатива)
user - пользователь подавший инициативу
probe - проба данных на получение актуальных данных по голосованиям
Объект petition

_id - идентификатор, строка
url - ссылка на сайте РОИ
uniqid - уникальный идентификатор инициативы в системе (человекочитаемый, например: "Инициатива № 77Ф333")
slug - укороченный текст из ссылки - уникальный идентификатор
name - название инициативы
description - подробный текст инициативы
jurisdiction - уровень инициативы
start_date - дата публикации инициативы
end_date - дата публикации инициативы
probe_date - дата последнего снятия информации об инициативе
votes - число голосов за
topic_id - тема инициативы
autor_id - идентификатор пользователя разместившего петицию
Источник: страница с описание инициативы

Пример

https://www.roi.ru/poll/petition/proble ... -internet/

Объект user

id - название
petitions - список петиций размещенных пользователем
Источник: страница инициатив пользователя

Пример https://www.roi.ru/poll/?pl1_uid=1612

Объект probe

id - искусственный уникальный ключ
probe_dt - дата и время пробы
petition - уникальный идентификатор петиции в системе
votes_yes - голосов за
votes_no - голосов против
probe_status - статус пробы, успешен ли сбор данных
Система создает пробы самостоятельно путем регулярных опросов страниц РОИ

Словари

level - уровень инициативы (уровень гос-ва)
status - статус инициативы - на голосовании, на рассмотрении, решение принято
topic - раздел к которой относится петиция
Точки доступа к API

/roi/v1/users - список пользователей с возможностью делать запросы
/roi/v1/users/[id] - профиль отдельного пользователя
/roi/v1/petitions - список всех петийций с возможностью делать запросы
/roi/v1/petitions/[id] - информация по конкретной петиции
/roi/v1/petitions/[id]/votes - история голосования по петиции по пробам. С возможностью пролистать все пробы
/roi/v1/dicts/topic - словарь разделов
/roi/v1/dicts/status - словарь статусов
/roi/v1/dicts/level - словарь уровней
Стратегии обновления

Первоначальное наполнение

Итеративная выгрузка данных по убыванию: https://www.roi.ru/poll/?s_f_1=user_f_29=DESC& параметр страницы передается как page_19= за один раз выводится 10 петиций. При первом запросе необходимо сохранить общее число петиций, а далее листать страницы.
Для каждой петиции необходимо сохранить информацию и сделать пробу данных.
Из страницы петиции выявить ID пользователя и заполнить коллекцию пользователей
Частота: однократно

Обновление списка петиций

Обращение к https://www.roi.ru/poll/?s_f_1=user_f_29=DESC& и выгрузка новых петиций.
Частота: 1 раз в 4 часа, 6 раз в сутки, 180 раз в месяц

Обновление данных о голосовании

Обновление информации о числе проголосовавших
Итеративное обновление данных по убыванию: https://www.roi.ru/poll/?s_f_1=user_f_29=DESC& параметр страницы передается как page_19= за один раз выводится 10 петиций. При первом запросе необходимо сохранить общее число петиций, а далее листать страницы.

Частота: 1 раз в 1 час, число обращений = (число петиций / 10) + 1 Для 2005 петиций - это около abs(2005/10) + 1 = 201 запрос за час и 24*201 = 4824 в сутки.

Обращение к каждой петиции в статусе "Идет голосование" и выгрузка статистики голосования
Частота: 1 раз в сутки на петицию. Для 2000 петиций - это около 2000 тысячи обращений в сутки. Если каждый час - то около 48 тысяч обращений в сутки

Структура ссылок сайта ROI

Страница петиции

Структура ссылки

http://www.roi.ru/poll/petition/[category_slug]/[slug]
category_slug - часть ссылки указывающая на категорию
slug - часть ссылки указывающая на уникальное название петиции
Пример

https://www.roi.ru/poll/petition/transp ... yh-sluzhb/
Стратница автора

Структура ссылки

https://www.roi.ru/poll/?pl1_uid=[user_id]
user_id - уникальный идентификатор пользователя
Пример

https://www.roi.ru/poll/?pl1_uid=1929
Гость
 

Re: Что-то про РОИ. API?

Сообщение Гость » 13 ноя 2013, 23:15

А это наверное заказчик:
НП "Информационная культура"

Неправительственное Партнерство "Информационная Культура" ("Инфокультура") - это негосударственная, некоммерческая организация, целью которой является развитие и популяризация концепций Открытого Государства и Открытых Данных.

Мы основываемся на принципе свободы доступа к информации и ее прозрачности и достоверности.

Наша цель - вовлечение общества в процесс принятия решений на международном, национальном и муниципальном уровнях; повышение гражданской информированности. Мы стремимся к эффективному использованию информации во имя прогресса общества, и поддержки государства в раскрытии информации для большей доступности, прозрачности и подотчетности.

Развитие и популяризация концепций Открытого государства и Открытых Данных - лучшее управление, стабильная и растущая экономика, повышение культурного уровня, улучшение качества жизни каждого гражданина. Подробнее - http://www.infoculture.ru
Гость
 

Re: Что-то про РОИ. API?

Сообщение Viktor.Ivanov » 09 янв 2014, 00:57

Гость пишет:Интересно, что бы это значило? Из служебных файлов:
petition_type number
проходят барьер в 100 тысяч голосов 6
от 50 до 100 тысяч голосов 5
от 10 до 50 тысяч голосов 74
от 1 до 10 тысяч голосов 775
до 1 тысячи голосов 1644

Это же петиции? Тогда от куда информация, что проходят барьер 100000 голосов именно 6 петиций?


Похоже на текущую статистику на РОИ: 6 инициатив - решение принято, 5 инициатив попадают в вилку от 50 до 100 тыс. голосов. В вилке от 10 до 50 тыс. голосов - 32 инициативы, остальные региональные?


Тема поднималась пользователем Anonymous 09 янв 2014, 00:57.
Аватара пользователя
Viktor.Ivanov
Модератор
 
Сообщения: 1413
Зарегистрирован: 10 май 2013, 17:14


Вернуться в Главный форум

Кто сейчас на конференции

Сейчас этот форум просматривают: admin, Flaer и гости: 3

cron
SPRINTHOST.RU: быстрый и надежный хостинг!