2018年のロシアでの大統領選挙に関するプロジェクトをどのように行いましたか







2017年の秋、VOICEのメンバーは選挙のオンラインブロードキャストを新しいレベルに引き上げるべきだと考えました。





そしてこれらすべては、投票者の39%がグルディニンのために住んでいる地域を見つけるためだけでなく、プーチンが選挙に勝てなかった国にそのようなサイトがあるかどうかをチェックするためでもあります。



悲しいかな、このプロジェクトへの金銭的投入は予想されてはならないことがすぐに明らかになり、誰もがほぼ純粋な熱意に取り組んだ。

非営利組織協会「有権者の防衛」「Golos」はロシアの公的組織です。 2000年に設立されました。 組織の宣言されたタスクは、有権者の権利を保護することです。 2013年半ばに、この組織はロシアの40地域で活動しました。



その仕事の中で、Golosはロシアの選挙法について市民に知らせ、選挙のすべての段階で長期的および短期的な選挙の監視を実施します。


プロジェクトに参加したのは、データ、プロジェクトの構造、およびデザインをどこで入手できるのかという明確なアイデアがあったからです。 チームにはサーバー側に対応する人が必要でした。私はこの役職に就きました。



このプロジェクトは、構造的に2つの主要部分に分割されました。



前編 :選挙前



最初の部分 :選挙前( uik.golosinfo.org )、選挙の1週間前に開始し、機会を提供することになっていた:



  1. アドレスで投票所を見つけます。
  2. マップ上のどこにあるかを確認します。
  3. このサイトでの人々の投票方法を正確に覚えておいてください。








この段階では、すべて1700万件以上のレコードの有権者の住所のベースの検索から始まり、CECのWebサイトから解析できます。 このデータベースでは、住所の各コンポーネント(家、通り、市、地区番号など)は個別のフィールドであり、そのようなコンポーネントには16種類あります。 異なるアドレスの空でないコンポーネントのセットは非常に異なります。 このデータベース内の1つのアドレスでも簡単に検索するのに1分以上かかりましたが、それ自体は長すぎます。ロードされたプロジェクトについて話す場合、許可されません。 スフィンクスは救助に来て、検索時間は100分の1秒に短縮されました。

Sphinx(英語のSQLフレーズインデックス)は、Andrey Aksyonovによって開発され、GNU GPLライセンスの下で配布されている全文検索システムです。 特徴的な機能は、インデックス作成と検索の高速化、および既存のDBMS(MySQL、PostgreSQL)および一般的なWebプログラミング言語のAPI(PHP、Python、Javaで公式にサポートされています。Perl、Ruby、.NET、C ++のコミュニティ実装API)との統合です)
Sphinxに慣れていない場合は、Sphinxを使用することを強くお勧めします; Sphinxでの作業は魔法のようであり、設定が簡単で、機能します。 ところで、Habr検索でもこの検索エンジンを使用しているという噂があります。



住所データベース内の検索により、2018年には有権者がどの選挙委員会に属しているかを判別できますが、2012年(最後の選挙の時点)には属していません。 一見、大きな変化はないようで、最寄りの学校で投票に行った人は行くでしょう。 しかし、実際には、変化があり、多くがありました。2013年に、半数以上のPEC(管区選挙委員会)の投票所の数が変化しました。 前回の大統領選挙で校区がどのように投票したかを示すために、2018年の校区番号と2012年の番号の間の通信を確立する必要があります。



この比較では、大きな困難が生じました。



残念ながら、2012年のアドレスベースはどこにも見つかりませんでした(そうでなければ、アドレスとサイトの直接通信を実装することは可能です)。 したがって、12日と18日でPECのアドレスを比較する必要がありました。 住所は別の形式であったため、村と通りの名前(大通り、路地など)を強調するスクリプトが作成されました。 したがって、約6万のPECを一致させることができました。 同じ日に、私たちは立ち上がって、ユーザーがPECを見つけられないと報告したユーザーの不満にぶつかりました。 すぐに、思いやりのある人々の助けのおかげで、Python geopyライブラリを使用して座標で残りのPECのマッチングを行いました。その結果、ほぼすべての住所で最後の選挙で投票率と投票数を与えることができました。











16年目のデータ(下院選挙)によると、すべての準備は整っていましたが、バックエンドとフロントエンドをカットする時間がありませんでした。これは計画中です。



パート2 :選挙日



秋に計画を議論する過程で、VOICEのメンバーは非常に空腹になったため、リアルタイムの結果を各セクションに詳細に表示することにしました! しかし、この考えで私たちは燃えました。



したがって、計画によれば、選挙当日、サイトは国から個々の投票所への詳細を含む投票者の投票率をオンラインで表示することになっており、投票数が終わったときに、さまざまな地域のロシア人が投票した方法を表示するように切り替えました。



プロジェクトの2番目の部分は、選挙の開始から始まり、投票率のダイナミクスを少し遅れて地図上に表示することになっています。 最初に地図上で極東地域が色付きで点灯し、投票所が開くと、色の境界線が西に移動することが計画されていました。



投票の過程で、校区委員会は10、12、15、18時間に投票率データを提出する必要があります。その後、投票数と委員会は投票所の詳細な統計情報を提出します。 パーサーを構成しました。これは、更新されるとすぐにCEC Webサイトからデータを慎重に収集し、サーバー上のデータベースにアップロードする準備ができていたため、Webサイトの訪問者はイベントの進行を最小限の遅延で確認できます。



バックエンドおよびフロントエンドのすべてのロジックは、下位レベル(PEC)から上位レベルのデータのコレクションに基づいて構築されました。 しかし、結果は地域のすべてのPECですぐに利用できると想定していたため、これは意図的な間違いでしたが、実際はそうではありません。 実際には、すべてのデータがCEC Webサイトにタイムリーに表示されたわけではないことが判明しました。 実際、どこからもデータはほとんどありません。 その結果、これが起こりました。データは、地域内の1つのPECのみから取得できます。



さらに、2800ものページがあるため、境内委員会の統計情報を含むサマリーテーブルをホストする領土委員会のページを解析しました。たとえば、TECに関する統計情報のあるページは、ロシア連邦の主題の数など85にすぎません。 国、ロシア連邦およびTECの主題ごとに個別のパーサーを作成し、それらをタイムリーに更新し、できるだけ早くPECを作成する必要がありましたが、それはすべて機能します。



困難を事前に予測しなかったため、投票プロセス中に、完全な信頼できるデータが得られるまでプロジェクトの第2段階に進まないことが決定されました。 そのため、プロジェクトはほぼリアルタイムで投票率を観察する能力を失いました。 しかし、投票率マップを慎重に調べ、候補者の投票の分布を調査する機会は、完全なデータがあれば(翌日の夕方までに)消えることはなく、プロジェクトを選挙結果を表示するモードに切り替えました。









その結果、3つのグローバルなメガステラルはすべて閉じられました(マップ、住所によるPECの検索、過去の選挙結果の表示)が、オンラインでは機能しませんでした。 すべてのエラーは綿密に研究されており、その方法はわかっていますが、それでも中央選挙管理委員会からより多くのコミュニケーションと、APIを介して最終的にリアルタイムデータの送信が開始されるという事実を期待しています。



そしてまた:





このプロジェクトに関与したすべての人、特にマップを作成したDataMapラボチーム(大仕事です!)に感謝します:Andreev Vyacheslav、Balashov Anton、Mandzhiev Khongor、およびElena Nikitin、Gleb Suvorov、Sergey Ustinov、Valery Viskalin、Marat Haliulin。



All Articles