Norwegian Car Sales
This example demonstates using different kinds of layouts for stacked graphs.
module NorwegianCarSales exposing (main)
import Axis
import Color exposing (Color)
import Dict exposing (Dict)
import Example
import Html exposing (div, text)
import Html.Attributes
import List.Extra as List
import Path exposing (Path)
import Scale exposing (ContinuousScale, OrdinalScale, Scale)
import Scale.Color
import Shape exposing (StackConfig, StackResult)
import Time exposing (Month(..))
import Time.Extra exposing (Parts)
import TypedSvg exposing (g, svg, text_)
import TypedSvg.Attributes exposing (class, fill, fontFamily, transform, viewBox)
import TypedSvg.Attributes.InPx exposing (fontSize)
import TypedSvg.Core exposing (Svg)
import TypedSvg.Types exposing (Paint(..), Transform(..))
exampleConfig : List ( String, StackConfig String )
exampleConfig =
[ ( "Stream Graph"
, { data = samples
, offset = Shape.stackOffsetWiggle
, order = Shape.sortByInsideOut (Tuple.second >> List.sum)
}
)
, ( "Silhouette"
, { data = samples
, offset = Shape.stackOffsetSilhouette
, order = Shape.sortByInsideOut (Tuple.second >> List.sum)
}
)
, ( "Stacked Area"
, { data = samples
, offset = Shape.stackOffsetNone
, order = List.sortBy (Tuple.second >> List.sum >> negate)
}
)
]
samples : List ( String, List Float )
samples =
norwegianCarSalesMiddlePlayers
colorScale : OrdinalScale String Color
colorScale =
List.map Tuple.first samples
|> List.reverse
|> Scale.ordinal Scale.Color.category10
sampleColor : String -> Color
sampleColor label =
Scale.convert colorScale label |> Maybe.withDefault Color.black
colors : List String -> List Color
colors labels =
List.map sampleColor labels
w : Float
w =
990
h : Float
h =
504
padding : Float
padding =
40
fromCalendarDate : Int -> Month -> Int -> Time.Posix
fromCalendarDate year month day =
Time.Extra.partsToPosix Time.utc (Parts year month day 0 0 0 0)
view : StackResult String -> Svg String
view { values, labels, extent } =
let
labelsWidth =
50
size : Int
size =
List.head values
|> Maybe.map List.length
|> Maybe.withDefault 0
xScale : ContinuousScale Float
xScale =
-- map an index to screen space
Scale.linear ( padding, w - padding - labelsWidth ) ( 0, toFloat size - 1 )
yScale : ContinuousScale Float
yScale =
Scale.linear ( h - padding, padding ) extent
|> Scale.nice 4
xAxis : Svg msg
xAxis =
-- construct the time domain for display
-- the data is per-month, so we have to pick a day
-- to get the ticks to show up correctly, the upper bound needs to be Jan 2 (Jan 1 does not work).
Scale.time Time.utc ( 0, w - padding * 2 - labelsWidth ) ( fromCalendarDate 2007 Jan 1, fromCalendarDate 2017 Jan 2 )
|> Axis.bottom [ Axis.tickCount 1 ]
yAxis : Svg msg
yAxis =
Axis.left [] yScale
paths =
List.map2 (renderStream ( xScale, yScale )) (colors labels) values
labelPositions =
let
position ys =
ys
|> List.last
|> Maybe.withDefault ( 0, 0 )
|> (\( y1, y2 ) -> (y2 + y1) / 2)
|> Scale.convert yScale
in
List.map position values
labelElement : String -> Float -> Svg msg
labelElement label yPosition =
g [ transform [ Translate (w - padding - labelsWidth + 10) yPosition ] ]
[ text_ [ fill <| Paint <| sampleColor label ] [ text label ] ]
in
div []
[ titleNavigation
, svg [ viewBox 0 0 w h ]
[ g [ transform [ Translate (padding - 1) (h - padding) ] ]
[ xAxis ]
, g [ class [ "series" ] ] paths
, g [ fontFamily [ "sans-serif" ], fontSize 10 ]
(List.map2 labelElement labels labelPositions)
]
]
titleNavigation : Html.Html String
titleNavigation =
div [ Html.Attributes.style "padding" (String.fromFloat padding ++ "px"), Html.Attributes.style "font-family" "sans-serif", Html.Attributes.style "position" "absolute" ]
[ Html.h1 [ Html.Attributes.style "margin-top" "0px", Html.Attributes.style "font-size" "20px" ] [ text "Car Sales in Norway" ]
, Example.navigation "Layout" exampleConfig
]
{-| Renders one colored stream with given scaling
-}
renderStream : ( ContinuousScale Float, ContinuousScale Float ) -> Color -> List ( Float, Float ) -> Svg msg
renderStream scales color coords =
Path.element (toArea scales coords) [ fill (Paint color) ]
{-| Create a svg path string that draws the area between two lines
-}
toArea : ( ContinuousScale Float, ContinuousScale Float ) -> List ( Float, Float ) -> Path
toArea ( scaleX, scaleY ) ys =
let
mapper : Int -> ( Float, Float ) -> Maybe ( ( Float, Float ), ( Float, Float ) )
mapper index ( y1, y2 ) =
let
xCoord =
index
|> toFloat
|> Scale.convert scaleX
( low, high ) =
if y1 < y2 then
( y1, y2 )
else
( y2, y1 )
in
Just
( ( xCoord, Scale.convert scaleY low )
, ( xCoord, Scale.convert scaleY high )
)
in
List.indexedMap mapper ys
|> Shape.area Shape.monotoneInXCurve
main =
Example.switchableViews exampleConfig (Shape.stack >> view)
norwegianCarSalesMiddlePlayers : List ( String, List Float )
norwegianCarSalesMiddlePlayers =
let
emptyYear : List Float
emptyYear =
List.repeat 12 0
yearValues : unused -> Dict Int (Dict Int Float) -> List Float
yearValues make years =
List.range 2007 2016
|> List.map (yearValue (Dict.map monthValues years))
|> List.concat
yearValue : Dict comparable (List Float) -> comparable -> List Float
yearValue year index =
Dict.get index year
|> Maybe.withDefault emptyYear
monthValues : unused -> Dict Int Float -> List Float
monthValues year months =
List.range 1 12
|> List.map (monthValue months)
monthValue : Dict Int Float -> Int -> Float
monthValue months index =
Dict.get index months
|> Maybe.withDefault 0
in
-- first, for every make convert the nested dict into a rectangular matrix (size: length data x 12), padding with 0s when data is missing
-- then, sort and select the middle brands:
-- they have more variation, which makes for a more interesting graph.
norwegianCarSales
|> Dict.map yearValues
|> Dict.toList
|> List.sortBy (Tuple.second >> List.sum >> negate)
|> List.drop 4
|> List.take 8
{-| Subset of a kaggle dataset
<https://www.kaggle.com/dmi3kno/newcarsalesnorway>
which in turn is based on (I assume scraped from)
<http://www.ofvas.no/bilsalget/category404.html>
-}
norwegianCarSales : Dict String (Dict Int (Dict Int Float))
norwegianCarSales =
Dict.fromList
[ ( "Audi"
, Dict.fromList
[ ( 2007, Dict.fromList [ ( 1, 471 ), ( 2, 356 ), ( 3, 423 ), ( 4, 390 ), ( 5, 437 ), ( 6, 345 ), ( 7, 424 ), ( 8, 379 ), ( 9, 280 ), ( 10, 374 ), ( 11, 118 ), ( 12, 139 ) ] )
, ( 2008, Dict.fromList [ ( 1, 157 ), ( 2, 200 ), ( 3, 235 ), ( 4, 504 ), ( 5, 467 ), ( 6, 555 ), ( 7, 504 ), ( 8, 491 ), ( 9, 435 ), ( 10, 457 ), ( 11, 341 ), ( 12, 388 ) ] )
, ( 2009, Dict.fromList [ ( 1, 89 ), ( 2, 138 ), ( 3, 160 ), ( 4, 148 ), ( 5, 151 ), ( 6, 186 ), ( 7, 246 ), ( 8, 224 ), ( 9, 133 ), ( 10, 217 ), ( 11, 226 ), ( 12, 257 ) ] )
, ( 2010, Dict.fromList [ ( 1, 176 ), ( 2, 143 ), ( 3, 207 ), ( 4, 494 ), ( 5, 388 ), ( 6, 343 ), ( 7, 248 ), ( 8, 237 ), ( 9, 144 ), ( 10, 178 ), ( 11, 205 ), ( 12, 161 ) ] )
, ( 2011, Dict.fromList [ ( 4, 175 ), ( 5, 242 ), ( 6, 203 ), ( 7, 192 ), ( 8, 193 ), ( 9, 205 ), ( 10, 184 ), ( 11, 178 ), ( 12, 185 ) ] )
, ( 2012, Dict.fromList [ ( 1, 159 ), ( 6, 143 ), ( 8, 185 ), ( 9, 119 ), ( 10, 160 ), ( 11, 216 ), ( 12, 140 ) ] )
, ( 2013, Dict.fromList [ ( 1, 179 ), ( 2, 169 ), ( 3, 139 ), ( 4, 247 ), ( 5, 408 ), ( 6, 159 ), ( 7, 407 ), ( 8, 348 ), ( 9, 344 ), ( 10, 372 ), ( 11, 269 ), ( 12, 332 ) ] )
, ( 2014, Dict.fromList [ ( 1, 151 ), ( 3, 201 ), ( 4, 240 ), ( 5, 219 ), ( 6, 196 ), ( 7, 222 ), ( 8, 200 ), ( 9, 146 ), ( 10, 221 ), ( 11, 157 ), ( 12, 205 ) ] )
, ( 2015, Dict.fromList [ ( 1, 119 ), ( 2, 207 ), ( 3, 281 ), ( 4, 327 ), ( 5, 303 ), ( 6, 292 ), ( 7, 321 ), ( 8, 198 ), ( 9, 148 ), ( 10, 192 ), ( 11, 209 ), ( 12, 179 ) ] )
, ( 2016, Dict.fromList [ ( 1, 427 ), ( 2, 416 ), ( 3, 266 ), ( 4, 275 ), ( 5, 266 ), ( 6, 241 ), ( 7, 419 ), ( 8, 164 ), ( 9, 186 ), ( 10, 203 ), ( 11, 270 ), ( 12, 403 ) ] )
]
)
, ( "BMW"
, Dict.fromList
[ ( 2007, Dict.fromList [ ( 1, 183 ), ( 2, 149 ) ] )
, ( 2008, Dict.fromList [ ( 1, 158 ), ( 2, 184 ), ( 4, 208 ), ( 5, 174 ), ( 6, 207 ), ( 7, 140 ), ( 8, 86 ), ( 9, 219 ), ( 10, 196 ), ( 11, 124 ), ( 12, 189 ) ] )
, ( 2009, Dict.fromList [ ( 2, 135 ), ( 3, 132 ), ( 4, 133 ), ( 5, 168 ), ( 6, 188 ), ( 7, 169 ), ( 8, 194 ), ( 9, 198 ), ( 10, 175 ), ( 11, 130 ), ( 12, 130 ) ] )
, ( 2011, Dict.fromList [ ( 1, 168 ), ( 10, 145 ) ] )
, ( 2012, Dict.fromList [ ( 1, 237 ), ( 2, 132 ), ( 3, 186 ), ( 4, 199 ), ( 5, 223 ), ( 6, 357 ), ( 7, 165 ), ( 8, 139 ), ( 9, 176 ), ( 10, 170 ), ( 11, 298 ), ( 12, 221 ) ] )
, ( 2013, Dict.fromList [ ( 1, 387 ), ( 5, 449 ), ( 7, 264 ), ( 9, 482 ), ( 10, 114 ), ( 11, 141 ), ( 12, 328 ) ] )
, ( 2014, Dict.fromList [ ( 1, 421 ), ( 2, 329 ), ( 3, 556 ), ( 4, 452 ), ( 5, 296 ), ( 6, 269 ), ( 7, 265 ), ( 8, 341 ), ( 9, 257 ), ( 10, 130 ), ( 11, 156 ) ] )
, ( 2015, Dict.fromList [ ( 3, 499 ), ( 4, 453 ), ( 9, 266 ), ( 10, 326 ), ( 11, 293 ), ( 12, 415 ) ] )
, ( 2016, Dict.fromList [ ( 1, 846 ), ( 2, 676 ), ( 3, 904 ), ( 4, 910 ), ( 5, 306 ), ( 6, 267 ), ( 7, 229 ), ( 8, 293 ), ( 9, 520 ), ( 10, 503 ), ( 11, 1264 ), ( 12, 523 ) ] )
, ( 2017, Dict.fromList [ ( 1, 1050 ) ] )
]
)
, ( "Citroen"
, Dict.fromList
[ ( 2012, Dict.fromList [ ( 11, 129 ) ] )
]
)
, ( "Ford"
, Dict.fromList
[ ( 2007, Dict.fromList [ ( 1, 631 ), ( 2, 447 ), ( 3, 530 ), ( 4, 264 ), ( 5, 274 ), ( 6, 289 ), ( 7, 773 ), ( 8, 631 ), ( 9, 558 ), ( 10, 558 ), ( 11, 407 ), ( 12, 614 ) ] )
, ( 2008, Dict.fromList [ ( 1, 761 ), ( 2, 859 ), ( 3, 597 ), ( 4, 696 ), ( 5, 719 ), ( 6, 692 ), ( 7, 758 ), ( 8, 466 ), ( 9, 578 ), ( 10, 514 ), ( 11, 445 ), ( 12, 537 ) ] )
, ( 2009, Dict.fromList [ ( 1, 422 ), ( 2, 315 ), ( 3, 416 ), ( 4, 333 ), ( 5, 414 ), ( 6, 558 ), ( 7, 534 ), ( 8, 338 ), ( 9, 627 ), ( 10, 673 ), ( 11, 550 ), ( 12, 698 ) ] )
, ( 2010, Dict.fromList [ ( 1, 700 ), ( 2, 312 ), ( 3, 770 ), ( 4, 420 ), ( 5, 689 ), ( 6, 912 ), ( 7, 708 ), ( 8, 827 ), ( 9, 844 ), ( 10, 620 ), ( 11, 806 ), ( 12, 805 ) ] )
, ( 2011, Dict.fromList [ ( 1, 451 ), ( 2, 504 ), ( 3, 601 ), ( 4, 468 ), ( 5, 645 ), ( 6, 635 ), ( 7, 560 ), ( 8, 750 ), ( 9, 679 ), ( 10, 736 ), ( 11, 769 ), ( 12, 846 ) ] )
, ( 2012, Dict.fromList [ ( 1, 433 ), ( 2, 484 ), ( 3, 773 ), ( 4, 424 ), ( 5, 645 ), ( 6, 882 ), ( 7, 587 ), ( 8, 568 ), ( 9, 601 ), ( 10, 581 ), ( 11, 434 ), ( 12, 548 ) ] )
, ( 2013, Dict.fromList [ ( 1, 317 ), ( 2, 253 ), ( 3, 264 ), ( 4, 325 ), ( 5, 805 ), ( 6, 295 ), ( 7, 551 ), ( 8, 258 ), ( 9, 384 ), ( 10, 257 ), ( 11, 203 ), ( 12, 682 ) ] )
, ( 2014, Dict.fromList [ ( 1, 152 ), ( 4, 266 ), ( 5, 159 ), ( 6, 239 ), ( 7, 150 ), ( 8, 144 ), ( 9, 161 ), ( 10, 139 ), ( 11, 219 ), ( 12, 190 ) ] )
, ( 2015, Dict.fromList [ ( 1, 414 ), ( 2, 452 ), ( 3, 769 ), ( 4, 607 ), ( 5, 474 ), ( 6, 395 ), ( 7, 350 ), ( 8, 486 ), ( 9, 353 ), ( 10, 306 ), ( 11, 385 ), ( 12, 348 ) ] )
, ( 2016, Dict.fromList [ ( 1, 702 ), ( 2, 703 ), ( 3, 645 ), ( 4, 645 ), ( 5, 269 ), ( 6, 319 ), ( 7, 111 ), ( 8, 124 ) ] )
]
)
, ( "Honda"
, Dict.fromList
[ ( 2007, Dict.fromList [ ( 1, 172 ), ( 2, 225 ), ( 3, 266 ), ( 4, 215 ), ( 5, 349 ), ( 6, 468 ), ( 7, 233 ), ( 8, 146 ), ( 9, 190 ), ( 10, 262 ), ( 11, 314 ), ( 12, 335 ) ] )
, ( 2008, Dict.fromList [ ( 1, 397 ), ( 2, 219 ), ( 3, 151 ), ( 4, 248 ), ( 5, 191 ), ( 6, 136 ), ( 7, 145 ), ( 8, 121 ), ( 9, 122 ), ( 10, 91 ), ( 11, 102 ), ( 12, 198 ) ] )
, ( 2009, Dict.fromList [ ( 2, 131 ), ( 3, 214 ), ( 4, 125 ), ( 5, 123 ), ( 6, 109 ), ( 7, 173 ), ( 8, 99 ), ( 9, 72 ), ( 10, 71 ) ] )
, ( 2012, Dict.fromList [ ( 11, 138 ), ( 12, 125 ) ] )
, ( 2013, Dict.fromList [ ( 1, 204 ), ( 2, 227 ), ( 3, 214 ), ( 4, 205 ), ( 5, 164 ), ( 6, 132 ), ( 7, 76 ), ( 8, 121 ), ( 12, 178 ) ] )
]
)
, ( "Hyundai"
, Dict.fromList
[ ( 2009, Dict.fromList [ ( 3, 141 ), ( 6, 147 ), ( 7, 165 ), ( 8, 165 ), ( 9, 123 ), ( 10, 125 ) ] )
, ( 2012, Dict.fromList [ ( 6, 257 ), ( 12, 116 ) ] )
, ( 2013, Dict.fromList [ ( 7, 133 ), ( 9, 112 ), ( 12, 70 ) ] )
, ( 2015, Dict.fromList [ ( 1, 217 ), ( 2, 76 ), ( 3, 106 ) ] )
, ( 2016, Dict.fromList [ ( 1, 95 ), ( 2, 54 ), ( 7, 152 ) ] )
]
)
, ( "Kia"
, Dict.fromList
[ ( 2012, Dict.fromList [ ( 2, 154 ), ( 6, 164 ), ( 8, 174 ), ( 9, 118 ), ( 11, 369 ), ( 12, 113 ) ] )
, ( 2013, Dict.fromList [ ( 2, 175 ), ( 7, 136 ), ( 9, 196 ), ( 12, 213 ) ] )
, ( 2015, Dict.fromList [ ( 3, 141 ), ( 4, 137 ) ] )
, ( 2016, Dict.fromList [ ( 1, 103 ), ( 2, 293 ), ( 3, 141 ), ( 4, 149 ), ( 7, 106 ) ] )
, ( 2017, Dict.fromList [ ( 1, 214 ) ] )
]
)
, ( "Mazda"
, Dict.fromList
[ ( 2008, Dict.fromList [ ( 6, 189 ), ( 7, 228 ), ( 8, 195 ), ( 9, 202 ), ( 10, 153 ), ( 11, 109 ), ( 12, 87 ) ] )
, ( 2009, Dict.fromList [ ( 1, 97 ), ( 2, 127 ), ( 3, 248 ), ( 4, 103 ), ( 5, 54 ), ( 6, 123 ), ( 7, 89 ), ( 8, 90 ), ( 9, 164 ), ( 10, 68 ) ] )
, ( 2012, Dict.fromList [ ( 6, 204 ), ( 11, 137 ), ( 12, 226 ) ] )
, ( 2013, Dict.fromList [ ( 1, 490 ), ( 2, 497 ), ( 3, 489 ), ( 4, 243 ), ( 5, 167 ), ( 6, 336 ), ( 7, 502 ), ( 8, 506 ), ( 9, 421 ), ( 10, 299 ), ( 11, 250 ), ( 12, 187 ) ] )
, ( 2014, Dict.fromList [ ( 1, 406 ), ( 2, 214 ), ( 3, 389 ), ( 4, 229 ), ( 5, 366 ), ( 6, 283 ), ( 7, 323 ), ( 8, 360 ), ( 9, 361 ), ( 10, 331 ), ( 11, 368 ), ( 12, 216 ) ] )
, ( 2015, Dict.fromList [ ( 1, 252 ), ( 2, 180 ), ( 3, 180 ), ( 4, 355 ), ( 5, 286 ), ( 6, 358 ), ( 7, 248 ), ( 8, 225 ), ( 9, 256 ), ( 10, 281 ), ( 11, 262 ), ( 12, 285 ) ] )
, ( 2016, Dict.fromList [ ( 1, 492 ), ( 2, 500 ), ( 3, 369 ), ( 4, 398 ), ( 5, 399 ), ( 6, 465 ), ( 7, 354 ), ( 8, 395 ), ( 9, 428 ), ( 10, 422 ), ( 11, 326 ), ( 12, 393 ) ] )
]
)
, ( "Mercedes-Benz"
, Dict.fromList
[ ( 2012, Dict.fromList [ ( 11, 149 ), ( 12, 436 ) ] )
, ( 2013, Dict.fromList [ ( 2, 281 ), ( 3, 221 ), ( 4, 260 ), ( 5, 368 ), ( 6, 81 ), ( 7, 112 ), ( 8, 148 ), ( 9, 107 ), ( 10, 121 ), ( 11, 151 ), ( 12, 595 ) ] )
, ( 2015, Dict.fromList [ ( 1, 178 ), ( 2, 172 ), ( 3, 224 ), ( 4, 392 ), ( 5, 144 ), ( 6, 142 ), ( 7, 263 ), ( 8, 346 ), ( 9, 153 ), ( 10, 108 ), ( 11, 141 ), ( 12, 159 ) ] )
, ( 2016, Dict.fromList [ ( 1, 386 ), ( 2, 342 ), ( 3, 461 ), ( 4, 380 ), ( 5, 365 ), ( 6, 359 ), ( 7, 251 ), ( 8, 300 ), ( 9, 466 ), ( 10, 326 ), ( 11, 232 ), ( 12, 200 ) ] )
, ( 2017, Dict.fromList [ ( 1, 285 ) ] )
]
)
, ( "Mitsubishi"
, Dict.fromList
[ ( 2007, Dict.fromList [ ( 8, 524 ), ( 9, 410 ), ( 10, 236 ), ( 11, 118 ), ( 12, 226 ) ] )
, ( 2008, Dict.fromList [ ( 1, 232 ), ( 2, 257 ), ( 3, 430 ), ( 4, 474 ), ( 5, 205 ), ( 6, 180 ), ( 7, 194 ), ( 8, 135 ), ( 9, 182 ), ( 10, 125 ), ( 11, 110 ), ( 12, 149 ) ] )
, ( 2009, Dict.fromList [ ( 3, 150 ), ( 4, 100 ) ] )
, ( 2010, Dict.fromList [ ( 2, 233 ), ( 3, 198 ), ( 4, 265 ), ( 5, 236 ), ( 6, 217 ), ( 7, 199 ), ( 8, 141 ), ( 9, 122 ), ( 10, 123 ), ( 11, 283 ), ( 12, 252 ) ] )
, ( 2011, Dict.fromList [ ( 1, 202 ), ( 2, 222 ), ( 3, 336 ), ( 4, 642 ), ( 5, 577 ), ( 6, 363 ), ( 7, 477 ), ( 8, 338 ), ( 9, 107 ), ( 10, 133 ), ( 11, 382 ), ( 12, 415 ) ] )
, ( 2012, Dict.fromList [ ( 1, 238 ), ( 2, 171 ), ( 3, 186 ), ( 4, 200 ), ( 5, 240 ), ( 6, 176 ), ( 7, 182 ), ( 8, 185 ), ( 9, 159 ), ( 10, 133 ), ( 11, 312 ), ( 12, 262 ) ] )
, ( 2013, Dict.fromList [ ( 1, 392 ), ( 2, 267 ), ( 3, 234 ), ( 4, 387 ), ( 5, 396 ), ( 6, 260 ), ( 7, 228 ), ( 8, 188 ), ( 9, 165 ), ( 10, 177 ), ( 11, 145 ), ( 12, 305 ) ] )
, ( 2014, Dict.fromList [ ( 1, 174 ), ( 2, 238 ), ( 3, 341 ), ( 4, 311 ), ( 5, 248 ), ( 6, 211 ), ( 7, 217 ), ( 8, 280 ), ( 9, 346 ), ( 10, 229 ), ( 11, 230 ), ( 12, 163 ) ] )
, ( 2015, Dict.fromList [ ( 1, 326 ), ( 2, 157 ), ( 3, 204 ), ( 4, 280 ), ( 5, 399 ), ( 6, 487 ), ( 7, 126 ), ( 8, 88 ), ( 9, 222 ), ( 10, 527 ), ( 11, 578 ), ( 12, 561 ) ] )
, ( 2016, Dict.fromList [ ( 1, 145 ), ( 2, 553 ), ( 3, 739 ), ( 4, 569 ), ( 5, 553 ), ( 6, 590 ), ( 7, 552 ), ( 8, 405 ), ( 9, 455 ), ( 10, 365 ), ( 11, 406 ), ( 12, 355 ) ] )
]
)
, ( "Nissan"
, Dict.fromList
[ ( 2007, Dict.fromList [ ( 11, 333 ) ] )
, ( 2008, Dict.fromList [ ( 1, 424 ), ( 2, 543 ), ( 3, 402 ), ( 4, 385 ), ( 5, 428 ), ( 6, 447 ), ( 7, 268 ), ( 8, 193 ), ( 9, 209 ), ( 10, 246 ), ( 11, 204 ), ( 12, 200 ) ] )
, ( 2009, Dict.fromList [ ( 1, 130 ), ( 2, 142 ), ( 3, 182 ), ( 4, 166 ), ( 5, 162 ), ( 6, 202 ), ( 7, 325 ), ( 8, 323 ), ( 9, 302 ), ( 10, 307 ), ( 11, 291 ), ( 12, 231 ) ] )
, ( 2010, Dict.fromList [ ( 1, 279 ), ( 2, 257 ), ( 3, 381 ), ( 4, 386 ), ( 5, 381 ), ( 6, 424 ), ( 7, 312 ), ( 8, 280 ), ( 9, 367 ), ( 10, 315 ), ( 11, 306 ), ( 12, 182 ) ] )
, ( 2011, Dict.fromList [ ( 1, 303 ), ( 2, 272 ), ( 3, 282 ), ( 4, 258 ), ( 5, 349 ), ( 6, 307 ), ( 7, 305 ), ( 8, 262 ), ( 9, 430 ), ( 10, 325 ), ( 11, 271 ), ( 12, 206 ) ] )
, ( 2012, Dict.fromList [ ( 1, 541 ), ( 2, 439 ), ( 3, 472 ), ( 4, 310 ), ( 5, 439 ), ( 6, 365 ), ( 7, 449 ), ( 8, 445 ), ( 9, 481 ), ( 10, 516 ), ( 11, 478 ), ( 12, 260 ) ] )
, ( 2013, Dict.fromList [ ( 1, 542 ), ( 2, 482 ), ( 3, 556 ), ( 4, 721 ), ( 5, 591 ), ( 6, 570 ), ( 7, 557 ), ( 8, 648 ), ( 9, 532 ), ( 10, 956 ), ( 11, 643 ), ( 12, 433 ) ] )
, ( 2014, Dict.fromList [ ( 1, 650 ), ( 2, 776 ), ( 3, 828 ), ( 4, 785 ), ( 5, 700 ), ( 6, 521 ), ( 7, 572 ), ( 8, 599 ), ( 9, 556 ), ( 10, 668 ), ( 11, 502 ), ( 12, 499 ) ] )
, ( 2015, Dict.fromList [ ( 1, 740 ), ( 2, 657 ), ( 3, 798 ), ( 4, 314 ), ( 5, 364 ), ( 6, 493 ), ( 7, 624 ), ( 8, 536 ), ( 9, 738 ), ( 10, 577 ), ( 11, 297 ), ( 12, 138 ) ] )
, ( 2016, Dict.fromList [ ( 1, 571 ), ( 2, 752 ), ( 3, 867 ), ( 4, 667 ), ( 5, 452 ), ( 6, 472 ), ( 7, 420 ), ( 8, 449 ), ( 9, 345 ), ( 10, 526 ), ( 11, 456 ), ( 12, 409 ) ] )
, ( 2017, Dict.fromList [ ( 1, 352 ) ] )
]
)
, ( "Opel"
, Dict.fromList
[ ( 2007, Dict.fromList [ ( 1, 396 ), ( 2, 221 ), ( 3, 211 ), ( 4, 152 ), ( 5, 187 ), ( 6, 214 ), ( 7, 205 ), ( 8, 146 ), ( 9, 150 ), ( 10, 164 ), ( 11, 154 ), ( 12, 130 ) ] )
, ( 2009, Dict.fromList [ ( 1, 117 ), ( 2, 86 ), ( 3, 156 ), ( 4, 197 ), ( 5, 237 ), ( 6, 281 ), ( 7, 236 ), ( 8, 116 ), ( 9, 132 ), ( 10, 167 ), ( 11, 143 ), ( 12, 147 ) ] )
, ( 2010, Dict.fromList [ ( 3, 202 ), ( 4, 211 ), ( 5, 164 ), ( 6, 213 ), ( 7, 134 ), ( 8, 144 ), ( 9, 90 ) ] )
, ( 2011, Dict.fromList [ ( 1, 168 ), ( 2, 136 ), ( 3, 213 ), ( 4, 172 ), ( 5, 191 ), ( 6, 168 ), ( 7, 176 ), ( 8, 147 ), ( 9, 111 ), ( 11, 114 ), ( 12, 81 ) ] )
, ( 2013, Dict.fromList [ ( 5, 238 ), ( 6, 110 ), ( 12, 233 ) ] )
, ( 2015, Dict.fromList [ ( 3, 31 ), ( 4, 30 ) ] )
, ( 2016, Dict.fromList [ ( 1, 133 ), ( 2, 177 ), ( 3, 83 ), ( 4, 170 ), ( 5, 188 ), ( 6, 225 ), ( 7, 192 ) ] )
]
)
, ( "Peugeot"
, Dict.fromList
[ ( 2007, Dict.fromList [ ( 1, 801 ), ( 2, 493 ), ( 3, 600 ), ( 4, 409 ), ( 5, 556 ), ( 6, 421 ), ( 7, 570 ), ( 8, 372 ), ( 9, 291 ), ( 10, 491 ), ( 11, 327 ), ( 12, 112 ) ] )
, ( 2008, Dict.fromList [ ( 1, 337 ), ( 2, 144 ), ( 3, 130 ), ( 4, 213 ), ( 5, 379 ), ( 6, 138 ), ( 7, 405 ), ( 8, 350 ), ( 9, 243 ), ( 10, 328 ), ( 11, 260 ), ( 12, 73 ) ] )
, ( 2009, Dict.fromList [ ( 1, 209 ), ( 2, 204 ), ( 3, 278 ), ( 4, 402 ), ( 5, 256 ), ( 6, 114 ), ( 7, 138 ), ( 8, 99 ), ( 9, 62 ), ( 10, 69 ), ( 11, 85 ), ( 12, 39 ) ] )
, ( 2010, Dict.fromList [ ( 1, 718 ), ( 2, 291 ), ( 3, 308 ), ( 4, 220 ), ( 5, 199 ), ( 6, 193 ), ( 7, 201 ), ( 8, 203 ), ( 9, 160 ), ( 10, 183 ), ( 11, 165 ), ( 12, 115 ) ] )
, ( 2011, Dict.fromList [ ( 1, 167 ), ( 2, 192 ), ( 3, 177 ), ( 4, 222 ), ( 5, 149 ), ( 6, 309 ), ( 7, 365 ), ( 8, 315 ), ( 9, 353 ), ( 11, 312 ), ( 12, 231 ) ] )
, ( 2012, Dict.fromList [ ( 1, 186 ), ( 2, 169 ), ( 3, 133 ), ( 4, 128 ), ( 5, 198 ), ( 6, 289 ), ( 11, 195 ) ] )
, ( 2013, Dict.fromList [ ( 1, 374 ), ( 2, 187 ), ( 3, 148 ), ( 5, 331 ), ( 9, 143 ), ( 12, 72 ) ] )
, ( 2014, Dict.fromList [ ( 1, 343 ), ( 2, 184 ), ( 10, 260 ), ( 12, 206 ) ] )
, ( 2015, Dict.fromList [ ( 3, 168 ), ( 4, 181 ), ( 5, 196 ), ( 6, 203 ), ( 7, 174 ), ( 8, 145 ), ( 9, 112 ), ( 10, 170 ), ( 11, 136 ) ] )
, ( 2016, Dict.fromList [ ( 1, 236 ), ( 2, 212 ), ( 3, 142 ), ( 4, 170 ), ( 5, 152 ), ( 6, 153 ), ( 7, 114 ) ] )
, ( 2017, Dict.fromList [ ( 1, 216 ) ] )
]
)
, ( "Renault"
, Dict.fromList
[ ( 2015, Dict.fromList [ ( 3, 228 ), ( 4, 154 ), ( 6, 431 ), ( 7, 24 ) ] )
, ( 2016, Dict.fromList [ ( 1, 197 ), ( 2, 50 ), ( 3, 291 ), ( 4, 230 ), ( 5, 64 ), ( 6, 398 ), ( 7, 79 ), ( 8, 15 ), ( 9, 158 ), ( 10, 161 ), ( 11, 100 ) ] )
, ( 2017, Dict.fromList [ ( 1, 240 ) ] )
]
)
, ( "Saab"
, Dict.fromList
[ ( 2007, Dict.fromList [ ( 3, 214 ), ( 4, 167 ), ( 5, 224 ), ( 6, 161 ), ( 12, 259 ) ] )
]
)
, ( "Skoda"
, Dict.fromList
[ ( 2007, Dict.fromList [ ( 1, 481 ), ( 2, 334 ), ( 3, 295 ), ( 4, 253 ), ( 5, 279 ), ( 6, 295 ), ( 7, 290 ), ( 8, 258 ), ( 9, 192 ), ( 10, 256 ), ( 11, 258 ), ( 12, 308 ) ] )
, ( 2008, Dict.fromList [ ( 1, 216 ), ( 2, 225 ), ( 3, 415 ), ( 4, 268 ), ( 5, 268 ), ( 6, 220 ), ( 7, 167 ), ( 8, 139 ), ( 9, 152 ), ( 10, 117 ), ( 11, 117 ), ( 12, 181 ) ] )
, ( 2009, Dict.fromList [ ( 1, 92 ), ( 2, 197 ), ( 3, 236 ), ( 4, 286 ), ( 5, 232 ), ( 6, 182 ), ( 7, 195 ), ( 8, 169 ), ( 9, 194 ), ( 10, 318 ), ( 11, 220 ), ( 12, 211 ) ] )
, ( 2010, Dict.fromList [ ( 1, 197 ), ( 2, 272 ), ( 3, 278 ), ( 4, 272 ), ( 5, 178 ), ( 6, 263 ), ( 7, 282 ), ( 8, 177 ), ( 9, 258 ), ( 10, 258 ), ( 11, 323 ), ( 12, 256 ) ] )
, ( 2011, Dict.fromList [ ( 1, 257 ), ( 2, 278 ), ( 3, 209 ), ( 4, 238 ), ( 5, 241 ), ( 6, 245 ), ( 7, 283 ), ( 8, 274 ), ( 9, 331 ), ( 10, 357 ), ( 11, 257 ), ( 12, 321 ) ] )
, ( 2012, Dict.fromList [ ( 2, 219 ), ( 3, 210 ), ( 4, 297 ), ( 5, 220 ), ( 6, 401 ), ( 7, 356 ), ( 8, 217 ), ( 9, 179 ), ( 10, 255 ), ( 11, 190 ), ( 12, 383 ) ] )
, ( 2013, Dict.fromList [ ( 3, 243 ), ( 4, 252 ), ( 5, 187 ), ( 6, 184 ), ( 7, 348 ), ( 8, 324 ), ( 9, 444 ), ( 10, 540 ), ( 11, 524 ), ( 12, 702 ) ] )
, ( 2014, Dict.fromList [ ( 1, 378 ), ( 2, 308 ), ( 3, 301 ), ( 4, 398 ), ( 5, 412 ), ( 6, 381 ), ( 7, 336 ), ( 8, 354 ), ( 9, 323 ), ( 10, 483 ), ( 11, 361 ), ( 12, 392 ) ] )
, ( 2015, Dict.fromList [ ( 1, 289 ), ( 2, 362 ), ( 3, 466 ), ( 4, 521 ), ( 5, 329 ), ( 6, 358 ), ( 7, 343 ), ( 8, 372 ), ( 9, 311 ), ( 10, 386 ), ( 11, 310 ), ( 12, 349 ) ] )
, ( 2016, Dict.fromList [ ( 1, 462 ), ( 2, 688 ), ( 3, 473 ), ( 4, 569 ), ( 5, 561 ), ( 6, 496 ), ( 7, 449 ), ( 8, 392 ), ( 9, 482 ), ( 10, 489 ), ( 11, 496 ), ( 12, 384 ) ] )
, ( 2017, Dict.fromList [ ( 1, 563 ) ] )
]
)
, ( "Subaru"
, Dict.fromList
[ ( 2009, Dict.fromList [ ( 1, 83 ) ] )
, ( 2012, Dict.fromList [ ( 6, 182 ), ( 7, 263 ), ( 8, 272 ), ( 9, 319 ), ( 10, 212 ), ( 11, 168 ), ( 12, 80 ) ] )
, ( 2013, Dict.fromList [ ( 12, 134 ) ] )
]
)
, ( "Suzuki"
, Dict.fromList
[ ( 2010, Dict.fromList [ ( 2, 164 ) ] )
, ( 2011, Dict.fromList [ ( 1, 370 ), ( 2, 124 ), ( 3, 212 ), ( 4, 128 ), ( 5, 101 ) ] )
, ( 2012, Dict.fromList [ ( 1, 158 ) ] )
, ( 2013, Dict.fromList [ ( 9, 132 ), ( 12, 211 ) ] )
, ( 2014, Dict.fromList [ ( 1, 314 ), ( 2, 209 ), ( 3, 168 ), ( 4, 165 ), ( 5, 163 ), ( 6, 135 ), ( 7, 174 ), ( 8, 142 ), ( 9, 196 ), ( 10, 208 ), ( 11, 150 ), ( 12, 121 ) ] )
, ( 2015, Dict.fromList [ ( 1, 170 ), ( 2, 185 ), ( 3, 247 ), ( 4, 58 ) ] )
, ( 2016, Dict.fromList [ ( 1, 219 ), ( 2, 156 ), ( 3, 181 ), ( 4, 154 ), ( 5, 93 ), ( 6, 95 ), ( 7, 128 ) ] )
]
)
, ( "Tesla"
, Dict.fromList
[ ( 2013, Dict.fromList [ ( 9, 616 ), ( 12, 553 ) ] )
, ( 2014, Dict.fromList [ ( 2, 431 ), ( 3, 1493 ), ( 4, 171 ), ( 5, 371 ), ( 6, 536 ), ( 7, 114 ), ( 8, 183 ), ( 9, 104 ), ( 10, 36 ), ( 11, 202 ), ( 12, 267 ) ] )
, ( 2015, Dict.fromList [ ( 2, 321 ), ( 3, 1140 ), ( 4, 230 ), ( 5, 346 ), ( 6, 566 ), ( 7, 222 ), ( 8, 220 ), ( 9, 127 ), ( 10, 198 ), ( 11, 225 ), ( 12, 373 ) ] )
, ( 2016, Dict.fromList [ ( 1, 105 ), ( 2, 113 ), ( 3, 487 ), ( 4, 96 ), ( 5, 156 ), ( 6, 284 ), ( 7, 43 ), ( 8, 170 ), ( 9, 247 ), ( 10, 39 ), ( 11, 48 ), ( 12, 263 ) ] )
, ( 2017, Dict.fromList [ ( 1, 238 ) ] )
]
)
, ( "Toyota"
, Dict.fromList
[ ( 2007, Dict.fromList [ ( 1, 2699 ), ( 2, 1744 ), ( 3, 1413 ), ( 4, 908 ), ( 5, 1714 ), ( 6, 1485 ), ( 7, 1781 ), ( 8, 1616 ), ( 9, 1164 ), ( 10, 1500 ), ( 11, 1447 ), ( 12, 966 ) ] )
, ( 2008, Dict.fromList [ ( 1, 1618 ), ( 2, 1436 ), ( 3, 1252 ), ( 4, 1346 ), ( 5, 991 ), ( 6, 861 ), ( 7, 994 ), ( 8, 711 ), ( 9, 940 ), ( 10, 979 ), ( 11, 610 ), ( 12, 765 ) ] )
, ( 2009, Dict.fromList [ ( 1, 748 ), ( 2, 641 ), ( 3, 759 ), ( 4, 696 ), ( 5, 756 ), ( 6, 548 ), ( 7, 844 ), ( 8, 736 ), ( 9, 1124 ), ( 10, 955 ), ( 11, 1229 ), ( 12, 948 ) ] )
, ( 2010, Dict.fromList [ ( 1, 1610 ), ( 2, 1117 ), ( 3, 1132 ), ( 4, 830 ), ( 5, 808 ), ( 6, 941 ), ( 7, 1021 ), ( 8, 1121 ), ( 9, 1156 ), ( 10, 1182 ), ( 11, 1323 ), ( 12, 517 ) ] )
, ( 2011, Dict.fromList [ ( 1, 1190 ), ( 2, 940 ), ( 3, 1041 ), ( 4, 680 ), ( 5, 712 ), ( 6, 504 ), ( 7, 871 ), ( 8, 662 ), ( 9, 704 ), ( 10, 764 ), ( 11, 764 ), ( 12, 542 ) ] )
, ( 2012, Dict.fromList [ ( 1, 965 ), ( 2, 1124 ), ( 3, 1359 ), ( 4, 970 ), ( 5, 1080 ), ( 6, 1023 ), ( 7, 959 ), ( 8, 904 ), ( 9, 1059 ), ( 10, 1321 ), ( 11, 1031 ), ( 12, 622 ) ] )
, ( 2013, Dict.fromList [ ( 1, 854 ), ( 2, 1193 ), ( 3, 1018 ), ( 4, 1497 ), ( 5, 1395 ), ( 6, 1232 ), ( 7, 1485 ), ( 8, 1410 ), ( 9, 1426 ), ( 10, 1601 ), ( 11, 1269 ), ( 12, 765 ) ] )
, ( 2014, Dict.fromList [ ( 1, 1196 ), ( 2, 1109 ), ( 3, 1145 ), ( 4, 960 ), ( 5, 1134 ), ( 6, 1038 ), ( 7, 1064 ), ( 8, 966 ), ( 9, 1170 ), ( 10, 1199 ), ( 11, 1036 ), ( 12, 873 ) ] )
, ( 2015, Dict.fromList [ ( 1, 1176 ), ( 2, 1153 ), ( 3, 1447 ), ( 4, 1238 ), ( 5, 1019 ), ( 6, 1075 ), ( 7, 1078 ), ( 8, 1064 ), ( 9, 1213 ), ( 10, 1185 ), ( 11, 886 ), ( 12, 619 ) ] )
, ( 2016, Dict.fromList [ ( 1, 1083 ), ( 2, 1358 ), ( 3, 1519 ), ( 4, 1421 ), ( 5, 1665 ), ( 6, 1582 ), ( 7, 1119 ), ( 8, 1689 ), ( 9, 1711 ), ( 10, 1243 ), ( 11, 1287 ), ( 12, 976 ) ] )
, ( 2017, Dict.fromList [ ( 1, 1342 ) ] )
]
)
, ( "Volkswagen"
, Dict.fromList
[ ( 2007, Dict.fromList [ ( 1, 2440 ), ( 2, 1395 ), ( 3, 1314 ), ( 4, 1113 ), ( 5, 1796 ), ( 6, 1437 ), ( 7, 1690 ), ( 8, 1539 ), ( 9, 1258 ), ( 10, 1798 ), ( 11, 1368 ), ( 12, 1014 ) ] )
, ( 2008, Dict.fromList [ ( 1, 790 ), ( 2, 1379 ), ( 3, 1116 ), ( 4, 1297 ), ( 5, 1006 ), ( 6, 840 ), ( 7, 841 ), ( 8, 1017 ), ( 9, 952 ), ( 10, 1057 ), ( 11, 942 ), ( 12, 979 ) ] )
, ( 2009, Dict.fromList [ ( 1, 559 ), ( 2, 727 ), ( 3, 691 ), ( 4, 854 ), ( 5, 874 ), ( 6, 786 ), ( 7, 1135 ), ( 8, 941 ), ( 9, 964 ), ( 10, 1079 ), ( 11, 1203 ), ( 12, 1238 ) ] )
, ( 2010, Dict.fromList [ ( 1, 1348 ), ( 2, 1096 ), ( 3, 1118 ), ( 4, 1709 ), ( 5, 1359 ), ( 6, 1238 ), ( 7, 1733 ), ( 8, 1302 ), ( 9, 1350 ), ( 10, 1415 ), ( 11, 1473 ), ( 12, 977 ) ] )
, ( 2011, Dict.fromList [ ( 1, 1551 ), ( 2, 1393 ), ( 3, 1739 ), ( 4, 1724 ), ( 5, 1570 ), ( 6, 998 ), ( 7, 1316 ), ( 8, 1601 ), ( 9, 1395 ), ( 10, 1622 ), ( 11, 1583 ), ( 12, 1731 ) ] )
, ( 2012, Dict.fromList [ ( 1, 1287 ), ( 2, 1152 ), ( 3, 1444 ), ( 4, 1753 ), ( 5, 1404 ), ( 6, 1147 ), ( 7, 1582 ), ( 8, 1369 ), ( 9, 1128 ), ( 10, 1384 ), ( 11, 1826 ), ( 12, 1084 ) ] )
, ( 2013, Dict.fromList [ ( 1, 1252 ), ( 2, 1185 ), ( 3, 1051 ), ( 4, 1543 ), ( 5, 979 ), ( 6, 1047 ), ( 7, 1357 ), ( 8, 1012 ), ( 9, 1244 ), ( 10, 1108 ), ( 11, 1090 ), ( 12, 1342 ) ] )
, ( 2014, Dict.fromList [ ( 1, 1121 ), ( 2, 1158 ), ( 3, 1451 ), ( 4, 1682 ), ( 5, 1424 ), ( 6, 1307 ), ( 7, 1880 ), ( 8, 1775 ), ( 9, 1470 ), ( 10, 1760 ), ( 11, 1532 ), ( 12, 1725 ) ] )
, ( 2015, Dict.fromList [ ( 1, 3078 ), ( 2, 398 ), ( 3, 2006 ), ( 4, 2342 ), ( 5, 1689 ), ( 6, 2114 ), ( 7, 2012 ), ( 8, 1844 ), ( 9, 1466 ), ( 10, 1791 ), ( 11, 1940 ), ( 12, 1394 ) ] )
, ( 2016, Dict.fromList [ ( 1, 1608 ), ( 2, 1871 ), ( 3, 2028 ), ( 4, 2777 ), ( 5, 1878 ), ( 6, 1817 ), ( 7, 1866 ), ( 8, 1903 ), ( 9, 1726 ), ( 10, 1764 ), ( 11, 1627 ), ( 12, 1670 ) ] )
, ( 2017, Dict.fromList [ ( 1, 1253 ) ] )
]
)
, ( "Volvo"
, Dict.fromList
[ ( 2007, Dict.fromList [ ( 1, 346 ), ( 2, 407 ), ( 3, 433 ), ( 4, 359 ), ( 5, 514 ), ( 6, 439 ), ( 7, 819 ), ( 8, 278 ), ( 9, 384 ), ( 10, 615 ), ( 11, 409 ), ( 12, 384 ) ] )
, ( 2008, Dict.fromList [ ( 1, 315 ), ( 2, 392 ), ( 3, 281 ), ( 4, 405 ), ( 5, 447 ), ( 6, 311 ), ( 7, 267 ), ( 8, 120 ), ( 9, 233 ), ( 10, 185 ), ( 11, 139 ), ( 12, 343 ) ] )
, ( 2009, Dict.fromList [ ( 1, 262 ), ( 2, 199 ), ( 3, 88 ), ( 4, 243 ), ( 5, 217 ), ( 6, 516 ), ( 7, 836 ), ( 8, 296 ), ( 9, 590 ), ( 10, 508 ), ( 11, 901 ), ( 12, 1133 ) ] )
, ( 2010, Dict.fromList [ ( 1, 483 ), ( 2, 645 ), ( 3, 846 ), ( 4, 665 ), ( 5, 557 ), ( 6, 570 ), ( 7, 900 ), ( 8, 358 ), ( 9, 612 ), ( 10, 584 ), ( 11, 639 ), ( 12, 1069 ) ] )
, ( 2011, Dict.fromList [ ( 1, 361 ), ( 2, 751 ), ( 3, 901 ), ( 4, 647 ), ( 5, 968 ), ( 6, 770 ), ( 7, 1033 ), ( 8, 633 ), ( 9, 1088 ), ( 10, 813 ), ( 11, 1099 ), ( 12, 1175 ) ] )
, ( 2012, Dict.fromList [ ( 1, 761 ), ( 2, 588 ), ( 3, 1043 ), ( 4, 881 ), ( 5, 1036 ), ( 6, 824 ), ( 7, 860 ), ( 8, 418 ), ( 9, 623 ), ( 10, 748 ), ( 11, 1052 ), ( 12, 1227 ) ] )
, ( 2013, Dict.fromList [ ( 1, 723 ), ( 2, 646 ), ( 3, 679 ), ( 4, 876 ), ( 5, 920 ), ( 6, 572 ), ( 7, 881 ), ( 8, 467 ), ( 9, 1059 ), ( 10, 831 ), ( 11, 786 ), ( 12, 1850 ) ] )
, ( 2014, Dict.fromList [ ( 1, 340 ), ( 2, 566 ), ( 3, 723 ), ( 4, 478 ), ( 5, 519 ), ( 6, 468 ), ( 7, 556 ), ( 8, 373 ), ( 9, 538 ), ( 10, 680 ), ( 11, 785 ), ( 12, 1621 ) ] )
, ( 2015, Dict.fromList [ ( 3, 546 ), ( 4, 712 ), ( 5, 635 ), ( 6, 454 ), ( 7, 368 ), ( 8, 257 ), ( 9, 407 ), ( 10, 480 ), ( 11, 537 ), ( 12, 1052 ) ] )
, ( 2016, Dict.fromList [ ( 1, 631 ), ( 2, 706 ), ( 3, 615 ), ( 4, 651 ), ( 5, 270 ), ( 6, 282 ), ( 7, 493 ), ( 12, 602 ) ] )
, ( 2017, Dict.fromList [ ( 1, 1081 ) ] )
]
)
]