Goochelen met cijfers

op basis van je postcode...

De website geenstijl.nl heeft een Allochtoon-O-meter online staan. Typ daar je postcode in en je krijgt de meest recente CBS gegevens over het aantal niet-westerse allochtonen in je omgeving.

Voor de gemeente Epe levert dat het volgende resultaat op:

In de delen van het dorp Epe met de postcode 8161 woonden op 1 januari 2006 6585 mensen, waarvan 205 niet-westerse allochtonen (3.1%). In de postcode gebieden 8162 woonden op dezelfde datum 8975 mensen, waarvan 450 niet-westerse allochtonen (5%).

De racisten en xenofoben kunnen dus het beste uitkijken naar een woning met een 8161 postcode. In het postcode gebied 8166 van Emst zullen zij zich nog meer thuis voelen, omdat daar op 1 januari 2006 3045 mensen woonden, waarvan er maar 20 niet-westerse allochtonen zijn (0.7%).

Toch wel opvallend dat de kiezers in Emst het niet zo op lijken te hebben met buitenlanders. Maar liefst 5,4% van de kiezers in Emst stemde op de partij van Geert Wilders (Partij voor de Vrijheid). Dat is wel onder het landelijk gemiddelde van 5,8%, maar voor een dorp met zo weinig allochtonen wel opvallend.

In Oene zullen de rechtsextremisten zich overigens nog meer thuis voelen. In het dorp met de school met de dichtgeplakte ramen woonden op 1 januari 2006 1595 mensen, waarvan 15 niet-westerse allochtonen (0.9%). Overigens was de partij van Geert Wilders daar ook onevenredig populair met maar liefst 4,7% van de stemmen.

Voor Vaassen liggen de cijfers en de verhouding geheel anders. Daar woonden op 1 januari 2006 in postcodegebied 8171 7695 mensen, waarvan 180 niet-westerse allochtonen (2.3%). In het deel met postcode 8172 woonden op dezelfde peildatum 5085 mensen, waarvan 615 niet-westerse allochtonen (12.1%). En daar stemde 4,8% op de partij voor de Vrijheid.

In het dorp Epe was de uitkomst 5,6% voor Wilders en kornuiten. Hoewel het aantal niet allochtone westerlingen daar hoger ligt, vind ik dat ook schokkend veel. Dat betekent dat meer dan één op de twintig inwoners in mijn dorp achter de harde taal van ongenuanceerd rechts aanholt.

Het is wel interessant dat de uitkomsten van het wetenschappelijke verkiezingsonderzoek uit de jaren tachtig nog steeds lijken te gelden: mensen in plaatsen en buurten met weinig buitenlanders stemmen vaker op partijen die tegen buitenlanders zijn (destijds de CentrumPartij van Janmaat) dan mensen met veel allochtonen in de woonomgeving. Als reden werd toen gegeven dat de mensen in ´witte plaatsen en wijken´ bang zijn dat er meer allochtonen in de wijk komen. Uitzonderingen waren ook toen al plaatsen waar relatief veel kiezers stemden op (de voorlopers van) de ChristenUnie en de SGP. En dat komt weer overeen met de uitkomsten in Oene. Vaassen met de meeste niet-westerse allochtonen lijkt ook aan dit patroon te voldoen... daar was Wilders beduidend minder populair dan in Epe en Emst.

Deze berekeningen en conclusies zijn weliswaar richtinggevend, maar wetenschappelijk niet echt verantwoord. Ten eerste kan ik niet helemaal beoordelen of de indelingen per postcode helemaal zuiver parallel lopen aan de dorpskernen. Dat kan tot een kleine foutmarge leiden. Bovendien mag iedereen binnen de gemeente bij een stembureau naar keuze stemmen. Het is dus maar de vraag in hoeverre de stemmers in de eigen woonplaats hebben gestemd. Maar gelet op de uitkomsten en de ervaringen uit de jaren tachtig lijkt het voor een belangrijk deel representatief. En dan is dit voer om over na te denken.

© Harold Makaske 30 januari 2007 to allow skipping count when used in template (ie to not count on click in main page) V1.4 - Fixed ignoe same IP count problem V1.5 - Added views_log table and changed plugin performance to check for unique visits by IP address. [gRegor] - Added option to set the length of time before re-counting hits from the same IP address (default: 2 hours) [gRegor] V1.6 - Added plugin menu to display all view count, w/ counter reset function - Delete view counter and log for deleted item V1.7 - use sql_query V1.8 - Admin page enhancement to preserve order and sort info v1.9 - Added item title in admin menu v1.9.1 - ignore draft in admin menu */ class NP_Views extends NucleusPlugin { // Note: I never run this plugin on 2.0 and have no idea whether it // wil work on <2.5. A user can simply chnage it to return // '200' and see if it works (likely will). I will gladly // change the min version to 2.0 and add the sql_table fix // upon such report. 8) function getMinNucleusVersion() { return '250'; } function getName() { return 'Views'; } function getAuthor() { return 'Rodrigo Moraes | Edmond Hui (admun) | gRegor Morrill'; } function getURL() { return 'http://www.tipos.com.br'; } function getVersion() { return '1.9.1'; } function getDescription() { return 'This plugin counts how many times an entry has been displayed.'; } function getEventList() { return array('PostAddItem', 'QuickMenu', 'PostDeleteItem'); } function supportsFeature($what) { switch($what) { case 'SqlTablePrefix': return 1; default: return 0; } } function getTableList() { return array( sql_table('plugin_views'), sql_table('plugin_views_log') ); } function install() { sql_query('CREATE TABLE IF NOT EXISTS ' . sql_table('plugin_views') . ' (id int(11) NOT NULL default "0", views int(15) NOT NULL default "0")'); sql_query('CREATE TABLE IF NOT EXISTS ' . sql_table('plugin_views_log') . ' (id int(11) NOT NULL auto_increment, ip varchar(20) NOT NULL default "", itemid int(11) NOT NULL default "0", viewtime varchar(32) NOT NULL default "", PRIMARY KEY (id) )'); $this->createOption('silent','Silent mode - No #Display shown in Item (still need to add the skinVar, for use with MostViewed)','yesno','no'); $this->createOption('deletetables','Delete this plugin\'s table and data when uninstalling?','yesno','yes'); $this->createOption('timespan', 'Hours to wait before re-counting visitors', 'text', '2'); } function unInstall() { if ($this->getOption('deletetables') == 'yes') { sql_query('DROP TABLE ' . sql_table('plugin_views') ); sql_query('DROP TABLE ' . sql_table('plugin_views_log') ); } } function hasAdminArea() { return 1; } /** * Adds an entry to the 'Quick Menu' on the Nucleus administration pages. * The entry will link to the commentcontrol admin page */ function event_QuickMenu(&$data) { global $member; if (!($member->isLoggedIn() && $member->isAdmin())) return; array_push( $data['options'], array( 'title' => 'View Counts', 'url' => $this->getAdminURL(), 'tooltip' => 'See the view count of all items' ) ); } function doTemplateVar(&$item, $input) { $itemid = $item->itemid; $remote_ip = ServerVar('REMOTE_ADDR'); $timespan = $this->getOption('timespan') * 3600; $now = time(); // get the current Views count $query = "SELECT views FROM " . sql_table('plugin_views') . " WHERE id=" . $itemid; $result = sql_query($query); $row = mysql_fetch_object($result); $views = intval($row->views); // Only do count updates if "skipcount" is not set if ($input != 'skipcount') { // This takes care of previous items if (mysql_num_rows($result) == 0) { $query = "INSERT INTO " . sql_table('plugin_views') . " (id, views) VALUES('$itemid', '1')"; sql_query($query); //$views = 0; } // end if // Check the views_log table to see if this IP has a viewtime for this item $query = "SELECT viewtime FROM " . sql_table('plugin_views_log') . " WHERE ip='" . $remote_ip . "' AND itemid=" . $itemid; $result = sql_query($query); // No views from this IP in the past X hours, so update the Views count if (mysql_num_rows($result) == 0) { $views++; $this->_updateViewsCount($itemid, $views); $this->_addViewsLog($itemid, $remote_ip, $now); } // end if else { $viewtime = mysql_result($result, 0, 'viewtime'); // It's been longer than X hours, so recount if (($now - $timespan) > $viewtime) { $views++; $this->_updateViewsCount($itemid, $views); $this->_updateViewsLog($itemid, $remote_ip, $now); } } // end else } // end if // Clear logs that are more than X hours old $time = $now - $timespan; $query = "DELETE FROM " . sql_table('plugin_views_log') . " WHERE (viewtime < $time)"; sql_query($query); if ($this->getOption('silent') == 'no') { echo $views; } // end if } function event_PostAddItem($data) { $itemid = $data['itemid']; $query = "INSERT INTO " . sql_table('plugin_views') . " (id, views) VALUES('$itemid', '0')"; sql_query($query); } function event_PostDeleteItem($data) { $itemid = $data['itemid']; $query = "DELETE FROM " . sql_table('plugin_views') . " WHERE id=". $itemid; sql_query($query); $query = "DELETE FROM " . sql_table('plugin_views_log') . " WHERE itemid=". $itemid; sql_query($query); } function _updateViewsCount($itemid, $views) { // update the Views table with the new count $query = "UPDATE " . sql_table('plugin_views') . " SET views='$views' WHERE id=$itemid"; sql_query($query); } function _addViewsLog($itemid, $ip, $time) { // add IP and itemid to views_log table so it won't be recounted for X hours $query = "INSERT INTO " . sql_table('plugin_views_log') . " (ip, itemid, viewtime) VALUES ('$ip', '$itemid', '$time')"; sql_query($query); } function _updateViewsLog($itemid, $ip, $time) { // update the views_log viewtime so it won't be recounted for X hours $query = "UPDATE " . sql_table('plugin_views_log') . " SET viewtime='$time' WHERE ip='$ip'"; sql_query($query); } function doAction($actionType) { global $CONF, $member; if (!($member->isLoggedIn() && $member->isAdmin())) return 'Sorry. not allowed'; if ($actionType == 'resetview'){ $id = requestVar('id'); $query = "UPDATE " . sql_table('plugin_views') . " SET views=0 WHERE id=$id"; sql_query($query); } else if ($actionType == 'resetallview') { $query = "UPDATE " . sql_table('plugin_views') . " SET views=0"; sql_query($query); } $order = requestVar('order'); $sort = requestVar('sort'); header('Location: ' . $CONF['PluginURL'] . 'views/index.php?sort=' . $sort . '&order='.$order); } } ?> - Hoofdstuk: 10. Epe