Skip to content

Instantly share code, notes, and snippets.

@KoGor
Last active December 23, 2015 10:49
Show Gist options
  • Save KoGor/6624122 to your computer and use it in GitHub Desktop.
Save KoGor/6624122 to your computer and use it in GitHub Desktop.
Water quality in Moscow

Качество воды в районах Москвы. Инфографика основана на данных с хаба открытых данных, замеры показателей качества воды производились Мосводоканалом в период с 19 по 25 августа 2013 года.

При выполнении контроля качества воды в системах холодного водоснабжения городской водопроводной сети отбор проб воды для анализа производится непосредственно из кранов потребителей (в школах, магазинах, аптеках, больницах и др. учреждениях) в более чем 250 точках по территории города.

Анализ собранных таким образом данных показал, что все показатели в пределах нормы (СанПиН 2.1.4.1074-01).

<!DOCTYPE html>
<html lang="en">
<meta charset="utf-8">
<title>Water quality in Moscow</title>
<body>
<!-- start -->
<div id="map">
<link href="mapStyle.css" rel="stylesheet">
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://d3js.org/topojson.v1.min.js"></script>
<script src="http://d3js.org/queue.v1.min.js"></script>
<script src="mosWater.js"></script>
<div class="panel">
<table>
<tr>
<th>
<div>Водородный показатель (ед. pH)</div>
<div class="infoNote">
<em>рН</em> - величина, характеризующая концентрацию ионов водорода в растворах, то есть показатель кислотно-основных свойств воды. Допустимая величина рН должна находиться в пределах 6-9.
</div>
</th>
<td>-</td>
</tr>
<tr>
<th>
<div>Цветность (градусы)</div>
<div class="infoNote">
<em>Цветность воды.</em> Допустимая цветность воды - не более 20 градусов. Цветность воды - это ее природное свойство, характеризующееся, главным образом, наличием вымываемых из почвы гуминовых и фульвокислот, а также солей трехвалентного железа. Чем выше содержание гуминовых веществ в воде, тем интенсивнее выражается ее цвет.
</div>
</th>
<td>-</td>
</tr>
<tr>
<th>
<div>Мутность (мг/дм³)</div>
<div class="infoNote">
<em>Мутность воды.</em> Для питьевой воды допускается величина мутности не более 1,5 мг/л (по каолину). Мутность воды - это показатель, характеризующий содержание в ней нерастворимых частиц и коллоидов (взвесей).
</div>
</th>
<td>-</td>
</tr>
<tr>
<th>
<div>Остаточный хлор (мг/дм³)</div>
<div class="infoNote">
<em>Хлор остаточный</em> - показатель качества обеззараживания воды, выражаемый содержанием в воде активного хлора (в мг/л) по окончании процессов его связывания при хлорировании. В распределительной сети не нормируется
</div>
</th>
<td>-</td>
</tr>
<tr>
<th>
<div>Запах при 20°C (баллы)</div>
<div class="infoNote">
<em>Запах.</em> Запах определяют при 20&deg;С и при нагревании до 60&deg;С. Характер запаха (тинистый, хлорный и др.) питьевой воды не нормируется, но интенсивность запаха не должна превышать двух баллов.
</div>
</th>
<td>-</td>
</tr>
<tr>
<th>
<div>Запах при 60°C (баллы)</div>
<div class="infoNote">
<em>Запах.</em> Запах определяют при 20&deg;С и при нагревании до 60&deg;С. Характер запаха (тинистый, хлорный и др.) питьевой воды не нормируется, но интенсивность запаха не должна превышать двух баллов.
</div>
</th>
<td>-</td>
</tr>
<tr>
<th>
<div>Железо общее (мг/дм³)</div>
<div class="infoNote">
<em>Железо.</em> В питьевой воде допускается концентрация железа не более 0,3 мг/л. Вода, содержащая железо, безвредна, но в избыточных количествах оно придает ей желтую или желто-бурую окраску, снижая прозрачность.
</div>
</th>
<td>-</td>
</tr>
<tr>
<th>
<div>Общее микробное число (кол-во в 1 мл)</div>
<div class="infoNote">
<em>Общее микробное число (ОМЧ).</em> В 1 мл питьевой воды должно быть не более 50 КОЕ (колонии образующие единицы). ОМЧ более 50 КОЕ/мл свидетельствует об общей бактериологической загрязненности воды не болезнетворными микроорганизмами.
</div>
</th>
<td>-</td>
</tr>
<tr>
<th>
<div>Общие колиформные бактерии (КОЕ/100 мл)</div>
<div class="infoNote">
<em>Общие колиформные бактерии (ОКБ)</em> - показатель эпидемиологической безопасности питьевой воды. Колиформные бактерии не должны обнаруживаться в распределительной системе водоснабжения.
</div>
</th>
<td>-</td>
</tr>
<tr>
<th>
<div>Термотолерантные колиформные бактерии (КОЕ/100 мл)</div>
<div class="infoNote">
<em>Термотолерантные колиформные бактерии (ТКБ)</em> - это группа микроорганизмов, преимущественно представленная кишечной палочкой рода <em>Escherichia coli</em>, которые не должны обнаруживаться в распределительной системе водоснабжения.
</div>
</th>
<td>-</td>
</tr>
</table>
</div>
</div>
<!-- end -->
</body>
</html>
#map {
position: relative;
}
.panel {
position: absolute;
display: inline;
left: 762px;
}
svg {
background: #FFF;
pointer-events: all;
border: 2px dashed #98bf21;
}
.panel table {
width: 198px;
height: 500px;
border-collapse: collapse;
border: 2px dashed #98bf21;
border-left-style: none;
}
.panel th, td {
padding: 7px;
text-align: center;
border: 1px dashed #98bf21;
border-collapse: collapse;
font-size: 12px;
font-family: sans-serif;
}
.panel table th {
background-color: #EAF2D3;
text-align: left;
border-left-style: none;
}
.infoNote {
display: none;
}
th:hover div.infoNote {
position: absolute;
display: inline;
pointer-events: none;
background: #fff;
width: 300px;
padding: 5px;
text-align: left;
border: solid #ccc 1px;
color: #666;
font-size: 12px;
font-family: sans-serif;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: inset 0px 0px 3px #FF7519;
-moz-box-shadow: inset 0px 0px 3px #FF7519;
box-shadow: inset 0px 0px 3px #FF7519;
}
div.infoNote em {
color: #FF6600;
}
.zone {
stroke-width: .5px;
stroke-linejoin: round;
cursor: pointer;
}
.zoneTooltip {
position: absolute;
display: none;
pointer-events: none;
background: #fff;
padding: 3px;
text-align: left;
border: solid #ccc 1px;
color: #666;
font-size: 12px;
font-family: sans-serif;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
}
.pointLabel {
position: absolute;
display: none;
text-align: center;
padding: 2px;
font-size: 12px;
font-family: sans-serif;
pointer-events: none;
}
.infoLabel {
position: absolute;
bottom: 15px;
left: 10px;
display: none;
border: solid #ccc 1px;
color: #666;
background: #FFFFFF;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: 0px 0px 3px #99FF66;
-moz-box-shadow: 0px 0px 3px #99FF66;
box-shadow: 0px 0px 3px #99FF66;
text-align: left;
padding: 2px;
font-size: 12px;
font-family: sans-serif;
pointer-events: none;
}
.infoLabel span {
margin: 0px 5px;
}
.mapData {
fill: #99FF66;
stroke: #ffffff;
}
.mapData:hover {
fill: #FF944D;
}
.focused {
fill: #FF7519;
}
id rayonName okrug smell_20 coloration turbidity pH ferrum chlorum smell_60
157 Хамовники ЦАО 1 6 0.3 7.4 0.05 0.12 1-2
190 Пресненский ЦАО 1 8 0.38 7.3 0.05 0.32 1-2
207 Тверской ЦАО 1 8 0.35 7.3 0.05 0.35 1-2
159 Мещанский ЦАО 1 11 0.3 7.2 0.05 0.45 1-2
205 Красносельский ЦАО 1 11 0.41 7.2 0.05 0.54 1-2
206 Басманный ЦАО 1 10 0.3 7.2 0.05 0.16 1-2
178 Таганский ЦАО 1 8 0.3 7.4 0.05 0.14 1-2
181 Замоскворечье ЦАО 1 5 0.3 7.4 0.05 0.21 1
160 Якиманка ЦАО 1 5 0.63 7.2 0.05 0.15 1
218 Восточное Дегунино САО 2 11 0.3 7 0.05 0.51 1
135 Бескудниковский САО 1 11 0.39 7.2 0.05 0.4 2
241 Дмитровский САО 1 14 0.69 7.4 0.05 0.58 1
235 Западное Дегунино САО 1 13 0.38 7.2 0.05 0.56 1
247 Ховрино САО 1 11 0.3 7.3 0.05 0.44 1
219 Левобережный САО 1 8 0.3 7.3 0.05 0.46 1
136 Головинский САО 1 11 0.3 7.2 0.05 0.49 1
154 Коптево САО 1 12 0.3 7.2 0.05 0.84 1-2
137 Войковский САО 1 8 0.3 7.6 0.05 0.43 1-2
184 Сокол САО 1 7 0.3 7.3 0.05 0.26 1-2
139 Аэропорт САО 1 10 0.3 7.2 0.05 0.24 1-2
191 Хорошевский САО 1 8 0.3 7.3 0.05 0.91 1-2
174 Беговой САО 1 7 0.47 7.3 0.05 0.52 1-2
138 Савеловский САО 1 10 0.3 7.3 0.05 0.35 1
209 Тимирязевский САО 1 11 0.3 7.2 0.05 0.54 1
199 Молжаниновский САО 1 11 0.3 7.4 0.05 1.05 2
243 Лианозово СВАО 1 15 0.51 7.2 0.11 0.46 1
242 Бибирево СВАО 1 11 0.3 7.2 0.05 0.76 1
163 Алтуфьевский СВАО 1 12 0.33 7.2 0.05 0.34 2
217 Отрадное СВАО 1 12 0.3 7.1 0.05 0.61 2
142 Южное Медведково СВАО 1 11 0.9 7.1 0.05 0.42 1
236 Северное Медведково СВАО 1 12 0.5 7.1 0.05 0.52 2
156 Свиблово СВАО 1 13 0.44 7.2 0.09 0.74 1
155 Бабушкинский СВАО 1 11 0.54 7.1 0.1 0.38 1
246 Лосиноостровский СВАО 1 12 0.59 7.1 0.05 0.41 1
233 Ярославский СВАО 1 12 0.3 7.2 0.05 0.36 2
168 Бутырский СВАО 1 11 0.3 7.2 0.05 0.56 1
204 Марфино СВАО 2 14 0.3 7.3 0.05 0.44 1
146 Марьина роща СВАО 1 12 0.3 7.2 0.05 0.18 2
212 Ростокино СВАО 1 12 0.35 7.2 0.05 0.76 1-2
239 Алексеевский СВАО 1 11 0.39 7.2 0.05 0.29 1
208 Останкинский СВАО 1 11 0.3 7.2 0.05 0.75 1-2
240 Северный СВАО 0-1 12 0.3 7.2 0.11 0.16 0-1
214 Перово ВАО 1 9 0.47 7.2 0.05 0.26 1-2
143 Новогиреево ВАО 1 9 0.42 7.4 0.05 0.36 2
221 Ивановское ВАО 1 9 0.3 7.1 0.05 0.33 1-2
211 Вешняки ВАО 1 11 0.33 7.2 0.1 0.12 1-2
198 Новокосино ВАО 1 8 0.3 7.1 0.06 0.76 1-2
260 Косино-Ухтомский ВАО 2 9 0.46 7.2 0.05 0.35 2
223 Сокольники ВАО 1 11 0.3 7.2 0.05 0.13 1-2
186 Преображенское ВАО 1 11 0.3 7.3 0.05 0.36 1-2
213 Богородское ВАО 1 10 0.3 7.2 0.05 0.42 1
234 Метрогородок ВАО 1 10 0.84 7.1 0.05 0.2 1
222 Гольяново ВАО 1 10 0.45 7.3 0.08 0.39 1-2
244 Северное Измайлово ВАО 1 9 0.3 7.1 0.05 0.33 1
161 Измайлово ВАО 1-2 10 0.3 7.2 0.05 0.53 1-2
216 Восточное Измайлово ВАО 1 10 0.44 7.1 0.05 0.36 1-2
194 Соколиная гора ВАО 1 11 0.3 7.1 0.06 0.22 1-2
252 Восточный ВАО 1-2 12 0.3 7.4 0.05 0.51 2
196 Капотня ЮВАО 0 5 0.5 7.4 0.05 0.24 1
151 Марьино ЮВАО 1 5 0.45 7.4 0.1 0.22 1-2
245 Люблино ЮВАО 1 6 0.3 7.2 0.05 0.26 1-2
145 Печатники ЮВАО 1-2 7 0.3 7.2 0.05 0.3 1-2
193 Текстильщики ЮВАО 1-2 6 0.3 7.4 0.05 0.25 1-2
192 Кузьминки ЮВАО 1 7 0.3 7.3 0.05 0.22 2
197 Выхино-Жулебино ЮВАО 1-2 7 0.41 7.3 0.05 0.22 2
210 Рязанский ЮВАО 1-2 9 0.3 7.2 0.05 0.38 1-2
179 Нижегородский ЮВАО 1 8 0.32 7.2 0.07 0.13 1-2
165 Лефортово ЮВАО 1 10 0.46 7.1 0.05 0.13 1-2
188 Южнопортовый ЮВАО 1 6 0.3 7.3 0.05 0.19 1-2
229 Некрасовка ЮВАО 1-2 9 0.48 7.1 0.05 0.35 1
183 Орехово-Борисово Северное ЮАО 1-2 7 0.3 7.3 0.05 0.29 2
164 Орехово-Борисово Южное ЮАО 1 6 0.3 7.3 0.05 0.67 1-2
185 Зябликово ЮАО 1-2 9 0.3 7.2 0.05 0.22 2
195 Братеево ЮАО 0 5 0.3 7.4 0.05 0.3 1
226 Бирюлево Западное ЮАО 0-1 5 0.3 7.4 0.05 0.51 1-2
238 Бирюлево Восточное ЮАО 1-2 8 0.38 7.2 0.05 0.38 1-2
140 Царицыно ЮАО 0 6 0.3 7.3 0.05 0.39 0-1
170 Москворечье-Сабурово ЮАО 1 5 0.36 7.4 0.08 0.37 1
144 Нагатино-Садовники ЮАО 1 5 0.3 7.3 0.05 0.74 1
171 Нагатинский затон ЮАО 0 5 0.3 7.3 0.05 0.42 1
167 Чертаново Северное ЮАО 0 7 0.3 7.3 0.05 0.36 1-2
182 Чертаново Центральное ЮАО 1-2 8 0.78 7.3 0.05 0.21 1-2
237 Чертаново Южное ЮАО 1 8 0.3 7.3 0.05 0.43 1
189 Нагорный ЮАО 1 5 0.3 7.3 0.05 0.36 1
175 Донской ЮАО 0 5 0.86 7.3 0.11 0.58 1
162 Даниловский ЮАО 0 5 0.36 7.4 0.05 0.36 1
172 Южное Тушино СЗАО 1 7 0.3 7.2 0.07 0.24 1-2
220 Северное Тушино СЗАО 1 5 0.3 7.3 0.05 0.31 1-2
228 Ясенево ЮЗАО 1 7 0.3 7.3 0.05 0.75 1-2
258 Теплый Стан ЮЗАО 0 5 0.3 7.3 0.05 0.69 1
203 Коньково ЮЗАО 0 5 0.3 7.2 0.05 0.6 1
158 Ломоносовский ЮЗАО 1 6 0.3 7.4 0.05 0.72 1-2
169 Гагаринский ЮЗАО 1-2 5 0.3 7.3 0.05 0.29 1-2
166 Зюзино ЮЗАО 1 5 0.3 7.3 0.05 0.5 1
153 Черемушки ЮЗАО 1-2 7 0.3 7.3 0.05 0.23 2
141 Академический ЮЗАО 1 5 0.54 7.3 0.05 0.12 1-2
177 Котловка ЮЗАО 1 5 0.45 7.3 0.05 0.34 1-2
152 Обручевский ЮЗАО 0 5 0.3 7.3 0.05 0.45 1
224 Северное Бутово ЮЗАО 0 5 0.3 7.3 0.05 0.71 0
251 Южное Бутово ЮЗАО 1 8 0.33 7.4 0.05 0.55 1-2
249 Крылатское ЗАО 1 5 0.3 7.3 0.06 0.27 1-2
230 Кунцево ЗАО 1 5 0.3 7.2 0.05 0.47 1
225 Можайский ЗАО 1 5 0.3 7.4 0.05 0.64 1-2
147 Фили-Давыдково ЗАО 1 5 0.31 7.3 0.05 0.59 1
150 Филевский парк ЗАО 1 5 0.3 7.3 0.05 0.34 1
202 Очаково-Матвеевское ЗАО 1 7 0.31 7.4 0.05 0.74 1-2
262 Тропарево-Никулино ЗАО 0-1 5 0.3 7.4 0.05 0.89 1
148 Раменки ЗАО 1 5 0.34 7.3 0.05 0.29 1-2
149 Дорогомилово ЗАО 1 5 0.3 7.2 0.06 0.67 1
215 Проспект Вернадского ЗАО 1 5 0.3 7.3 0.05 0.97 1
231 Солнцево ЗАО 0-1 5 0.3 7.5 0.05 1.11 1-2
250 Ново-Переделкино ЗАО 0 5 0.3 7.5 0.05 0.95 1-2
263 Внуково ЗАО 1 5 0.3 7.5 0.05 0.78 1-2
173 Покровское-Стрешнево СЗАО 1 5 0.3 7.2 0.05 0.17 1-2
176 Щукино СЗАО 1 7 0.38 7.5 0.05 0.41 2
180 Хорошево-Мневники СЗАО 1 8 0.3 7.3 0.05 0.46 1-2
201 Строгино СЗАО 1 5 0.3 7.4 0.05 0.4 1-2
200 Митино СЗАО 1 5 0.3 7.3 0.05 0.75 2
248 Куркино СЗАО 1 5 0.3 7.4 0.05 0.21 2
254 Крюково ЗелАО 1 12 0.3 7.4 0.05 0.18 1-2
267 Матушкино ЗелАО 1 12 0.3 7.4 0.05 0.1 1
255 Савелки ЗелАО 1 11 0.32 7.4 0.05 0.1 1
253 Силино ЗелАО 1 13 0.3 7.4 0.05 0.1 1
187 Арбат ЦАО 1 10 0.3 7.2 0.05 0.57 1
227 Старое Крюково ЗелАО 1 12 0.3 7.4 0.07 0.1 1
var mapWidth = 756,
mapHeight = 496,
focused = false;
var projection = d3.geo.mercator()
.center([37.620825, 55.750480])
.scale(29000)
.translate([mapWidth / 1.75, mapHeight / 2]);
var path = d3.geo.path()
.projection(projection);
var svgMap = d3.select("div#map").append("svg")
.attr("overflow", "hidden")
.attr("width", mapWidth)
.attr("height", mapHeight);
var zone_tooltip = d3.select("div#map").append("div").attr("class", "zoneTooltip"),
point_label = d3.select("div#map").append("div").attr("class", "pointLabel"),
info_label = d3.select("div#map").append("div").attr("class", "infoLabel");
var g = svgMap.append("g");
queue()
.defer(d3.json, "mosZones.json")
.defer(d3.csv, "mosWater.csv")
.defer(d3.csv, "waterStations.csv")
.await(ready);
function ready(error, map, mdata, pdata) {
var phById = {},
colorationById = {},
turbidityById = {},
chlorumById = {},
smell_20ById = {},
smell_60ById = {},
ferrumById = {};
mdata.forEach(function(d) {
phById[d.id] = d.pH,
colorationById[d.id] = d.coloration,
turbidityById[d.id] = d.turbidity,
chlorumById[d.id] = d.chlorum,
smell_20ById[d.id] = d.smell_20,
smell_60ById[d.id] = d.smell_60,
ferrumById[d.id] = d.ferrum;
});
// Drawing map
g.selectAll("path.mapData")
.data(topojson.feature(map, map.objects.mos).features)
.enter().append("path")
.attr("d", path)
.attr("class", "mapData")
.on("mouseover", function(d) {
d3.select(this)
var t = zone_tooltip.html("")
.style("display", "block")
.style("left", (d3.event.pageX + 10) + "px")
.style("top", (d3.event.pageY - 15) + "px");
t.append("span").attr("class", "zoneLabel").text("Район: " + d.properties.name);
})
.on("mouseout", function(d) {
zone_tooltip.style("display", "none");
})
.on("click", focus)
.on("mousemove", function(d) {
zone_tooltip.style("left", (d3.event.pageX + 10) + "px")
.style("top", (d3.event.pageY - 15) + "px");
});
// Adding water stations
var station = g.selectAll("g.station")
.data(pdata)
.enter()
.append("g")
.attr("class", "station")
.attr("transform", function(d) { return "translate(" + projection([d.lon, d.lat]) + ")"; });
station.append("image")
.attr("xlink:href", "water_station-24.png")
.attr("x", function(d) {return -24;})
.attr("width", 48)
.attr("height", 24)
.on("mouseover", function(d) {
point_label.text(d.stationName)
.style("left", (d3.event.pageX + 5) + "px")
.style("top", (d3.event.pageY + 15) + "px")
.style("display", "inline");
})
.on("mouseout", function() {
point_label.style("display", "none");
});
//Adding data to panel
function focus(d) {
if (focused === d) return reset();
g.selectAll(".focused").classed("focused", false);
d3.select(this).classed("focused", focused = d);
var cells = d3.selectAll("td");
cells[0][0].innerHTML = phById[d.id];
cells[0][1].innerHTML = colorationById[d.id];
cells[0][2].innerHTML = turbidityById[d.id];
cells[0][3].innerHTML = chlorumById[d.id];
cells[0][4].innerHTML = smell_20ById[d.id];
cells[0][5].innerHTML = smell_60ById[d.id];
cells[0][6].innerHTML = ferrumById[d.id];
cells[0][7].innerHTML = "нет";
cells[0][8].innerHTML = "нет";
cells[0][9].innerHTML = "нет";
var zone = info_label.html("").style("display", "inline")
zone.append("span").text("Округ: " + d.properties.okrug);
zone.append("span").text("Район: " + d.properties.name);
}
function reset() {
g.selectAll(".focused").classed("focused", focused = false);
info_label.style("display", "none");
var cells = d3.selectAll("td");
cells[0].forEach(function(cell) {
cell.innerHTML = "-";
});
}
};
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
stationName lat lon
Рублевская станция водоподготовки 55.78203 37.347776
Восточная станция водоподготовки 55.816703 37.858595
Северная станция водоподготовки 55.949584 37.559106
Западная станция водоподготовки 55.631922 37.404217
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment