<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wikimirror.piraten.tools/wiki/index.php?action=history&amp;feed=atom&amp;title=Benutzer%3AJorges%2FPr%C3%A4ferenzprofile%2FSourcecode</id>
	<title>Benutzer:Jorges/Präferenzprofile/Sourcecode - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wikimirror.piraten.tools/wiki/index.php?action=history&amp;feed=atom&amp;title=Benutzer%3AJorges%2FPr%C3%A4ferenzprofile%2FSourcecode"/>
	<link rel="alternate" type="text/html" href="https://wikimirror.piraten.tools/wiki/index.php?title=Benutzer:Jorges/Pr%C3%A4ferenzprofile/Sourcecode&amp;action=history"/>
	<updated>2026-05-09T19:00:27Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Piratenwiki Mirror</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wikimirror.piraten.tools/wiki/index.php?title=Benutzer:Jorges/Pr%C3%A4ferenzprofile/Sourcecode&amp;diff=55693567&amp;oldid=prev</id>
		<title>imported&gt;Jorges: hat „Benutzer:Jorges/Stimmenprofile/Sourcecode“ nach „Benutzer:Jorges/Präferenzprofile/Sourcecode“ verschoben: genauere Bezeichnung</title>
		<link rel="alternate" type="text/html" href="https://wikimirror.piraten.tools/wiki/index.php?title=Benutzer:Jorges/Pr%C3%A4ferenzprofile/Sourcecode&amp;diff=55693567&amp;oldid=prev"/>
		<updated>2011-03-03T15:07:53Z</updated>

		<summary type="html">&lt;p&gt;hat „&lt;a href=&quot;/Benutzer:Jorges/Stimmenprofile/Sourcecode&quot; class=&quot;mw-redirect&quot; title=&quot;Benutzer:Jorges/Stimmenprofile/Sourcecode&quot;&gt;Benutzer:Jorges/Stimmenprofile/Sourcecode&lt;/a&gt;“ nach „&lt;a href=&quot;/Benutzer:Jorges/Pr%C3%A4ferenzprofile/Sourcecode&quot; title=&quot;Benutzer:Jorges/Präferenzprofile/Sourcecode&quot;&gt;Benutzer:Jorges/Präferenzprofile/Sourcecode&lt;/a&gt;“ verschoben: genauere Bezeichnung&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;evaluate.py -- als Parameter braucht es candidatesfile und ballotsfile, die gibt es hier: [[BE:Parteitag/2011.1/Rohdaten]]. Weiterhin muss [http://www.gnuplot.info Gnuplot] installiert sein, und natürlich Python.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import os&lt;br /&gt;
import numpy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def getCandidates( filename ):&lt;br /&gt;
	candidates = {}&lt;br /&gt;
	f = open( filename, &amp;quot;r&amp;quot;)&lt;br /&gt;
	for line in f:&lt;br /&gt;
		( key, name ) = line.split(&amp;quot;#&amp;quot;)&lt;br /&gt;
		candidates[key.strip()] = name.strip()&lt;br /&gt;
		#candidates.append(line.strip())&lt;br /&gt;
	f.close()&lt;br /&gt;
	return candidates&lt;br /&gt;
&lt;br /&gt;
def getBallots( filename ):&lt;br /&gt;
	ballots = []&lt;br /&gt;
	f = open( filename, &amp;quot;r&amp;quot;)&lt;br /&gt;
	for line in f:&lt;br /&gt;
		ballot = []&lt;br /&gt;
		yes_abs_no = line.split(&amp;quot;/&amp;quot;)&lt;br /&gt;
		for i in range(3):&lt;br /&gt;
			prefstrings = yes_abs_no[i].split(&amp;quot;;&amp;quot;)&lt;br /&gt;
			# delete last prefstring in no-area - it is the ballot number&lt;br /&gt;
			if i == 2:&lt;br /&gt;
				prefstrings.pop(len(prefstrings)-1)&lt;br /&gt;
			prefs = []&lt;br /&gt;
			for prefstring in prefstrings:&lt;br /&gt;
				prefs.append(prefstring.split(&amp;quot;,&amp;quot;))&lt;br /&gt;
			ballot.append( prefs )&lt;br /&gt;
		ballots.append(ballot)&lt;br /&gt;
	f.close()&lt;br /&gt;
	return ballots&lt;br /&gt;
	&lt;br /&gt;
def getPref(candidate, ballot):&lt;br /&gt;
	# vote = 0,1,2 &amp;lt;=&amp;gt; yes,abs,no&lt;br /&gt;
	# return (vote, pref, prefCount)&lt;br /&gt;
	# iterate over yes,abs,no&lt;br /&gt;
	for i in range(len(ballot)):&lt;br /&gt;
		# iterate over prefs&lt;br /&gt;
		for j in range(len(ballot[i])):&lt;br /&gt;
			# iterate over sameprefs&lt;br /&gt;
			for k in range(len(ballot[i][j])):&lt;br /&gt;
				if candidate == ballot[i][j][k]:&lt;br /&gt;
					#print ballot[i]&lt;br /&gt;
					return ( i, j+1, len(ballot[i]) )&lt;br /&gt;
	# if candidate not in ballot: count as abstention&lt;br /&gt;
	return (1,1,1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def getPoints():&lt;br /&gt;
	points = []&lt;br /&gt;
	for j in range(2,12):&lt;br /&gt;
		#print list(numpy.linspace(0, 10, num=j))&lt;br /&gt;
		points = points + list(numpy.linspace(0, 1, num=j))&lt;br /&gt;
	points = list(set(points))&lt;br /&gt;
	# create also endpoints&lt;br /&gt;
	endpoints = []&lt;br /&gt;
	for point in points:&lt;br /&gt;
		if point &amp;gt; 0:&lt;br /&gt;
			endpoints.append(point-0.001)&lt;br /&gt;
	points = points + endpoints&lt;br /&gt;
	#for point in sorted(points):&lt;br /&gt;
	#	print point&lt;br /&gt;
	return points&lt;br /&gt;
&lt;br /&gt;
def profile(candidates, ballots):&lt;br /&gt;
	#candidates = {&amp;quot;thiel&amp;quot;: &amp;quot;..name..&amp;quot;}&lt;br /&gt;
	#candidates = {&amp;quot;magalski&amp;quot;: &amp;quot;..name..&amp;quot;}&lt;br /&gt;
	for candidate in candidates.keys():&lt;br /&gt;
		# init profile&lt;br /&gt;
		profile = { &lt;br /&gt;
			0: dict.fromkeys( getPoints(), 0 ), &lt;br /&gt;
			1: dict.fromkeys( getPoints(), 0 ), &lt;br /&gt;
			2: dict.fromkeys( getPoints(), 0 )  &lt;br /&gt;
		}&lt;br /&gt;
		#ballots = [ballots[1]]&lt;br /&gt;
		for ballot in ballots:&lt;br /&gt;
			( vote, pref, prefCount ) = getPref( candidate, ballot )&lt;br /&gt;
			# get start and end of area to increase&lt;br /&gt;
			start, end  = (pref-1)/float(prefCount), pref/float(prefCount)&lt;br /&gt;
			#print ( vote, pref, prefCount ), start, end, float(1)/prefCount&lt;br /&gt;
			for point in profile[vote]:&lt;br /&gt;
				if point &amp;gt;= start and point &amp;lt; end:&lt;br /&gt;
					profile[vote][point] = profile[vote][point] +  prefCount/float(10)&lt;br /&gt;
		out = &amp;quot;&amp;quot;&lt;br /&gt;
		for vote in profile:&lt;br /&gt;
			#print profile[vote]&lt;br /&gt;
			#continue&lt;br /&gt;
			for point in sorted(profile[vote]):&lt;br /&gt;
				if vote == 0:&lt;br /&gt;
					out = out + str( point * 10 ) + &amp;quot;\t&amp;quot; + str( profile[vote][point] ) + &amp;quot;\n&amp;quot;&lt;br /&gt;
				if vote == 1:&lt;br /&gt;
					out = out + str( point + 10 ) + &amp;quot;\t&amp;quot; + str( profile[vote][point] * 10 ) + &amp;quot;\n&amp;quot;&lt;br /&gt;
				if vote == 2:&lt;br /&gt;
					out = out + str( point * 10 + 11 ) + &amp;quot;\t&amp;quot; + str( profile[vote][point] ) + &amp;quot;\n&amp;quot;&lt;br /&gt;
		#print out&lt;br /&gt;
		#return&lt;br /&gt;
		f = open( &amp;quot;plot.data&amp;quot;, &amp;quot;w&amp;quot; )&lt;br /&gt;
		f.write( out )&lt;br /&gt;
		f.close()&lt;br /&gt;
&lt;br /&gt;
		f = open( &amp;quot;plot.plt&amp;quot;, &amp;quot;w&amp;quot; )&lt;br /&gt;
		f.write( &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
reset&lt;br /&gt;
set title '&amp;quot;&amp;quot;&amp;quot; + candidates[candidate] + &amp;quot;&amp;quot;&amp;quot;'&lt;br /&gt;
set terminal png&lt;br /&gt;
set xrange [0:21]&lt;br /&gt;
#set notics&lt;br /&gt;
#set xtics nomirror&lt;br /&gt;
#set border 0&lt;br /&gt;
set nokey &lt;br /&gt;
set yrange [0:26]&lt;br /&gt;
set label &amp;quot;Ja&amp;quot; at 4.9,24&lt;br /&gt;
set label &amp;quot;Enth.&amp;quot; at 9.8,24&lt;br /&gt;
set label &amp;quot;Nein&amp;quot; at 15.9,24&lt;br /&gt;
set output 'stimmenprofil-praeferenzwahl-ahw11-&amp;quot;&amp;quot;&amp;quot; + candidate + &amp;quot;&amp;quot;&amp;quot;.png'&lt;br /&gt;
plot 'plot.data' with filledcurves x1 fs lc rgb &amp;quot;red&amp;quot;, 'bg-abstention.data' with filledcurves x1 fs lc rgb &amp;quot;#c0c0c0&amp;quot;&lt;br /&gt;
		&amp;quot;&amp;quot;&amp;quot; )&lt;br /&gt;
		f.close()&lt;br /&gt;
		os.system(&amp;quot;gnuplot plot.plt&amp;quot;)&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) != 3:&lt;br /&gt;
	print &amp;quot;Usage:&amp;quot;, sys.argv[0], &amp;quot;candidatesfile&amp;quot;, &amp;quot;ballotsfile&amp;quot;&lt;br /&gt;
	exit()&lt;br /&gt;
&lt;br /&gt;
candidates = getCandidates( sys.argv[1] )&lt;br /&gt;
ballots = getBallots( sys.argv[2] )&lt;br /&gt;
&lt;br /&gt;
profile(candidates, ballots )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bg-abstention.data (für den grauen Hintergrund bei ''Enthaltung''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 26&lt;br /&gt;
10.01 0&lt;br /&gt;
10.99 0&lt;br /&gt;
11 26&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>imported&gt;Jorges</name></author>
	</entry>
</feed>