Author Archive

T-SQL: Median und Ausreißer berechnen

Unter http://www.insidesql.org/blogs/frankkalis/2004/07/13/median-berechnen und http://quantmeditate.blogspot.com/2005/03/computing-interquartile-range.html habe ich Informationen zur Berechnung von Median und Quartilen in T-SQL gefunden.

DROP TABLE #data
CREATE TABLE #data(NUMBER FLOAT)
 
INSERT INTO #data VALUES(1.0);INSERT INTO #data VALUES(2.0);
INSERT INTO #data VALUES(3.0);INSERT INTO #data VALUES(4.0);
INSERT INTO #data VALUES(5.0);INSERT INTO #data VALUES(6.0);
INSERT INTO #data VALUES(7.0);INSERT INTO #data VALUES(8.0);
INSERT INTO #data VALUES(9.0);INSERT INTO #data VALUES(10.0);
INSERT INTO #data VALUES(11.0);INSERT INTO #data VALUES(12.0);
INSERT INTO #data VALUES(13.0);INSERT INTO #data VALUES(14.0);
INSERT INTO #data VALUES(15.0);INSERT INTO #data VALUES(16.0);
INSERT INTO #data VALUES(17.0);INSERT INTO #data VALUES(18.0);
INSERT INTO #data VALUES(19.0);INSERT INTO #data VALUES(20.0);
INSERT INTO #data VALUES(21.0);INSERT INTO #data VALUES(22.0);
INSERT INTO #data VALUES(23.0);INSERT INTO #data VALUES(24.0);
INSERT INTO #data VALUES(25.0);INSERT INTO #data VALUES(26.0);
INSERT INTO #data VALUES(27.0);INSERT INTO #data VALUES(28.0);
INSERT INTO #data VALUES(29.0);INSERT INTO #data VALUES(30.0);
INSERT INTO #data VALUES(31.0);INSERT INTO #data VALUES(32.0);
INSERT INTO #data VALUES(33.0);INSERT INTO #data VALUES(34.0);
INSERT INTO #data VALUES(35.0);INSERT INTO #data VALUES(36.0);
INSERT INTO #data VALUES(37.0);INSERT INTO #data VALUES(38.0);
INSERT INTO #data VALUES(39.0);INSERT INTO #data VALUES(40.0);
INSERT INTO #data VALUES(-100.0);INSERT INTO #data VALUES(100.0);
 
DECLARE @median FLOAT
DECLARE @perc25 FLOAT
DECLARE @perc75 FLOAT
DECLARE @iqr FLOAT
 
SET @median = (SELECT   MAX(NUMBER) AS Median FROM (SELECT TOP 50 PERCENT NUMBER FROM #data ORDER BY NUMBER) a)
SET @perc25 = (SELECT   MAX(NUMBER) AS Median FROM (SELECT TOP 25 PERCENT NUMBER FROM #data ORDER BY    NUMBER) a)
SET @perc75 = (SELECT   MAX(NUMBER) AS Median FROM (SELECT TOP 75 PERCENT NUMBER FROM #data ORDER BY    NUMBER) a)
 
print @median
print @perc25
print @perc75
 
SET @iqr = @perc75-@perc25
print 'IQR'
print @iqr
 
SELECT * FROM #data WHERE NUMBER <  (@median + 1.5* @iqr) AND 
NUMBER >  (@median - 1.5* @iqr)
 
print 'number of outliers'
SELECT COUNT(*) FROM #data WHERE NUMBER <  (@median - 1.5* @iqr)
OR NUMBER >  (@median + 1.5* @iqr)

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Open Data: LibraryHack 2011 in Australien

Im Mai 2011 findet der „LibraryHack 2011“ in Australien statt, bei dem die Teilnehmer aus öffentlichen Daten neue und nützliche Informationen generieren sollen. Mehr Informationen dazu unter der folgenden URL: http://data.gov.au/tag/libraryhack-2011/.

Ein interessanter Datensatz ist z.B. der zu den britischen Verurteilten, die im Zeitraum 1787-1867 nach Australien deportiert wurden: http://data.gov.au/dataset/british-convict-transportation-registers/.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Open Data: Australische Verwaltungsdaten im Internet

Golem hatte vor ein paar Tagen eine Meldung, dass Australien Verwaltungsinformationen zur freien Verfügung herausgibt. Hier der Link zu Meldung: http://www.golem.de/1103/82037.html.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Open Data: Freigabe bayerischer Luftbilder

Golem hat vor ein paar Tagen gemeldet, dass der Freistaat Bayern Luftbilder mit einer 2m-Auflösung freigibt. Hier der Link zum Artikel: (http://www.golem.de/1103/82039.html)

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Powershell Skript für gci mit begrenzter Rekursionstiefe

Das folgende Skript sucht rekursiv alle Ordner bis zum zweiten Unterverzeichnis und gibt den kompletten Pfad aus.

&{gci * | ?{$_.psiscontainer}; gci *\* | ?{$_.psiscontainer}; gci *\*\*| ?{$_.psiscontainer}} | Select-Object FullName | sort

Da die Pfade jedoch recht lang werden können und oft mehr als die 80 Zeichen hatten, muss man die Ausgabebreite anpassen: http://stackoverflow.com/questions/978777/powershell-output-column-width hatte den entsprechenden Hinweis:

clear-host
$Host.UI.RawUI.BufferSize = New-Object Management.Automation.Host.Size (500, 25)
&{gci *\* | ?{$_.psiscontainer};} | Select-Object FullName | sort | Out-File "c:\folders.txt" -Append -Width 250

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Powershell TechNet bei Microsoft

Unter http://technet.microsoft.com/en-us/library/ee692944.aspx findet sich die TechNet Seite von Microsoft zum Thema Powershell. Jede Menge Referenz, Beispiele und Vorlagen.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Excel: Zahl von bestimmten Zeichen in einer Zelle

Auf http://www.herber.de/forum/archiv/616to620/t617816.htm habe ich heute eine einfache Möglichkeit gefunden, die Fundstellen für ein bestimmtes Zeichen in einer Zelle zu zählen.

=LÄNGE(A1)-LÄNGE(WECHSELN(A1;".";""))

Die Funktion ermittelt die Länge des Strings ohne Vorkommen von ‚.‘ und zieht diese von der Länge mit ‚.‘ ab. Was übrig bleibt ist die Anzahl der ‚.‘ in Zelle A1.

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Pocketmod mit LaTeX erstellen — Nachtrag

Nachtrag 12.09.2015: Die pgfpages.sty scheint jetzt gefixt zu sein, ich bekomme keinen Fehler mehr.

Vor einer Weile hatte ich mal gezeigt, wie man nur mit LaTeX Pocketmods erstellen kann. (http://uweziegenhagen.de/?p=909). Da einige Rückmeldungen kamen, dass es nicht (mehr) funktionieren würde, habe ich mir eben die entsprechenden Codes angesehen. Das Problem liegt immer noch in der pgfpages.sty Datei, die einen Fehler beim Rotieren aufweist. Die Lösung liegt im Patchen der pgfpages.sty. Mit folgender Datei, die bei mir in \tex\latex\pgf\utilities liegt, klappt es fehlerfrei: pgfpages.zip

\documentclass[21pt]{scrartcl}
\usepackage[]{forloop}
\usepackage[]{blindtext}
\setlength{\parindent}{0pt}
\usepackage[]{lmodern}
\usepackage[english]{babel}
\newcounter{ct} 
\usepackage{pgfpages}
 
  \edef\pgfpageoptionheight{\the\paperwidth} % landscaped by default
  \edef\pgfpageoptionwidth{\the\paperheight}
  \def\pgfpageoptionborder{0pt}
  \def\pgfpageoptionfirstshipout{1}
 
\pgfpagesphysicalpageoptions{%
    logical pages=8,%
    physical height=\pgfpageoptionheight,%
    physical width=\pgfpageoptionwidth,%
    current logical shipout=\pgfpageoptionfirstshipout%
}
 
    \pgfpageslogicalpageoptions{1}{%
      border shrink=\pgfpageoptionborder,%
      resized width=.25\pgfphysicalwidth,%
      border code=\pgfusepath{stroke},%
      resized height=0.5\pgfphysicalheight,%
      center=\pgfpoint{.875\pgfphysicalwidth}{.75\pgfphysicalheight}%
    }%
    \pgfpageslogicalpageoptions{2}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=.25\pgfphysicalwidth,%
      border code=\pgfusepath{stroke},%
      rotation=180,%      
      resized height=0.5\pgfphysicalheight,%
      center=\pgfpoint{.875\pgfphysicalwidth}{.25\pgfphysicalheight}%
    }%
 
    \pgfpageslogicalpageoptions{3}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=.25\pgfphysicalwidth,%
      border code=\pgfusepath{stroke},%
      rotation=180,%      
      resized height=0.5\pgfphysicalheight,%
      center=\pgfpoint{.625\pgfphysicalwidth}{.25\pgfphysicalheight}%
    }%
    \pgfpageslogicalpageoptions{4}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=.25\pgfphysicalwidth,%
      border code=\pgfusepath{stroke},%
      rotation=180,%      
      resized height=0.5\pgfphysicalheight,%
      center=\pgfpoint{.375\pgfphysicalwidth}{.25\pgfphysicalheight}%
    }%
 
    \pgfpageslogicalpageoptions{5}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=.25\pgfphysicalwidth,%
      border code=\pgfusepath{stroke},%
      rotation=180,%
      resized height=0.5\pgfphysicalheight,%
      center=\pgfpoint{.125\pgfphysicalwidth}{.25\pgfphysicalheight}%
    }%
    \pgfpageslogicalpageoptions{6}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=.25\pgfphysicalwidth,%
      border code=\pgfusepath{stroke},%
      resized height=0.5\pgfphysicalheight,%
      center=\pgfpoint{.125\pgfphysicalwidth}{.75\pgfphysicalheight}%
    }%
 
    \pgfpageslogicalpageoptions{7}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=.25\pgfphysicalwidth,%
      border code=\pgfusepath{stroke},%
      resized height=0.5\pgfphysicalheight,%
      center=\pgfpoint{.375\pgfphysicalwidth}{.75\pgfphysicalheight}%
    }%
    \pgfpageslogicalpageoptions{8}
    {%
      border shrink=\pgfpageoptionborder,%
      resized width=.25\pgfphysicalwidth,%
      border code=\pgfusepath{stroke},%
      resized height=0.5\pgfphysicalheight,%
      center=\pgfpoint{.625\pgfphysicalwidth}{.75\pgfphysicalheight}%
    }%
 
 
\begin{document}
 
\forloop{ct}{1}{\value{ct} < 9}{%
\blindtext
\clearpage
 }
\end{document}

Ergebnis: pocketmod.pdf

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Adressen generieren mit Java

Vor einiger Zeit habe ich einen einfachen Generator für Adressen geschrieben, mit dem man unter anderem Test-Datenbanken befüllen kann. Anbei der Java-Quellcode, der sich auch leicht für andere Sprachen adaptieren lässt.

/**
 *
 * @author Uwe Ziegenhagen, www.uweziegenhagen.de
 * Releaseversion vom 13.12.2008
 */
 
import java.util.*;
 
public class Addressmaker {
 
    // Zahlenformat, um PLZ der Form 0xxxx darzustellen
    static java.text.DecimalFormat format =  new java.text.DecimalFormat("00000");
    // Vornamen-Array
    static String[] vornamen = new String[]{"Uwe","Andreas","Max","Moritz","Susi",
    "Steffi","Janine","Tim","Tom","Marko","Hans","Thomas","Maria","Bernd","Mandy",
    "Ben","Thorsten","Sabine","Ines","Isabell","Maria","Nicole","Sabrina","Jenny",
    "Klaus","Heinz","Sabrina", "Tatjana","Felix","Patricia-Elisabeth","Maria Theresia"};
    // Nachnamen-Array
    static String[] nachnamen = new String[]{"Meier","Meyer","Mayer","Müller","Schulze","Lehmann",
    "Köster","Schmidt","Schuster","Wagner","Schmied","Küster","Möller","Berger","Grünwald","Meier-Lehmann",
    "Schulze-Müller","von Fallersleben-Burghausen"};
 
    // ein paar Initiale, könnte man auch aus den Namen entnehmen
    static String[] initial = new String[]{" "," "," "," "," A. "," B. "," C. "," D. "," E. "," "," "};
    // Für Adressen der Form 10a oder b
    static String[] adressinitial = new String[]{"","a","b","c","d","","","","","",""};
    // Adresszusätze
    static String[] adresszusatz = new String[]{"bei Schmidt","c/o Schmidt","p.Adr. Max Mustermann"};
    // Ortsnamen sind zusammengesetzt aus Präfix und Suffix
    static String[] ortsprefix = new String[]{"Wald","Wiesen","Groß","Klein","Mittel","Ober","Ham","Nieder","Alt","Alten",
    "Königs","Langen","Moos","Mühl","Morgen","Schön","Tannen","Vogel","Wolfen","Kirch","Bären","Heide","Hohen","Breiten","Ehren","Eber",
    "Fichten","Grün","Roten", "Ehr"};
    static String[] ortssuffix = new String[]{"heim","dorf","hausen","burg","ow","au","furt","stein","aue","finow","tal","thal"};
 
    // Straßen setzen sich ebenso zusammen aus Suffix und Präfix
    static String[] strassenprefix = new String[]{"Wald","Wiesen","Amsel","Drossel","Finken","Wasser","Sonnen","Schiller","Goethe","Nachtigall","Spatzen"};
    static String[] strassensuffix = new String[]{"straße","weg","gasse","allee","platz"};
 
    // Domains für die Email-Adresse
    static String[] domains = new String[]{".info",".de",".com",".info",".ac.uk",".ru",".ac.jp"};
 
    // um später ein paar Ersetzungen zu machen
    static String vname = "";
    static String nname = "";
 
 
    public static void main(String[] args) {
        // initialisiere den Zufallszahlengenerator
        Random generator = new Random(new Date().getTime());
        // wieviele Adressen sollen generiert werden
        int wieoft = 10;
        // Email-Adressen erstellen ja oder nein
        boolean email = true;
 
        for (int i=0;i<wieoft;i++){
            // Generiere Vor- und Nachnamen
            vname = vornamen[generator.nextInt(vornamen.length)];
            nname = nachnamen[generator.nextInt(nachnamen.length)];
 
            // Gib Vor- und Nachnamen mit eventuellem Initial aus
            System.out.print(vname + initial[generator.nextInt(initial.length)] +
                nname + "\n");
 
            // wenn nächste Random-Zahl < 3 dann generiere Adresszusatz
            if (generator.nextInt(100)<3){
                System.out.println(adresszusatz[generator.nextInt(adresszusatz.length)]);
            }
 
            // Generiere Strassennamen
            System.out.print(strassenprefix[generator.nextInt(strassenprefix.length)] +
                strassensuffix[generator.nextInt(strassensuffix.length)]+ " " + generator.nextInt(99) + adressinitial[generator.nextInt(adressinitial.length)] +  "\n");
 
            // Generiere PLZ und Ortsnamen
            System.out.print(format.format(generator.nextInt(99999)) + " " +
                ortsprefix[generator.nextInt(ortsprefix.length)] +
                ortssuffix[generator.nextInt(ortssuffix.length)]+"\n");
 
            // Wenn Email-Adressen generiert werden sollen, dann
            // ersetze Umlaute und generiere die Adresse
            if (email==true){
                vname = vname.replaceAll("ö", "oe");
                vname = vname.replaceAll("ä", "ae");
                vname = vname.replaceAll("ü", "ue");
                nname = nname.replaceAll("ö", "oe");
                nname = nname.replaceAll("ä", "ae");
                nname = nname.replaceAll("ü", "ue");
                nname = nname.replaceAll(" ", ".");
                System.out.println(vname.toLowerCase() + "." + nname.toLowerCase() + "@" +
                        ortssuffix[generator.nextInt(ortssuffix.length)] +
                        domains[generator.nextInt(domains.length)]);
        }
        // abschließendes \n
        System.out.print("\n");
        }
    }
}

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website

Bilder und Videos der Neuseeland-Reise

Die Bilder und Videos der Neuseeland-Reise finden sich unter http://uweziegenhagen.de/?page_id=1246

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website