Weblog Tomasza Przechlewskiego [Zdjęcie T. Przechlewskiego]


scrum
random image [Photo gallery]
Zestawienie tagów
1-wire | 18b20 | 1wire | 2140 | 3rz | adamowicz | afera | alsamixer | amazon | amber | anniversary | antypis | apache | api | applebaum | arm | armenia | astronomy | asus | atom.xml | awk | aws | bachotek | bakłażan | balcerowicz | balta | banan | bash | batumi | berlin | białowieża | białystok | bibtex | bieszczady | biznes | blogger | blogging | blosxom | bme280 | bono | borne-sulinowo | breugel | bt747 | budapeszt | budyń | bursztyn | canon | cedewu | chaos | chello | chiller | chillerpl | chown | christophe dominici | chujowetaśmy | ciasto | cmentarz | contour | coronavirus | covi19 | covid | covid19 | cron | css | csv | cukinia | curl | cycling | d54250wykh | dbi | debian | dejavu | dhcp | dht22 | dia | docbook | dom | dp1500 | ds18b20 | duda | dulkiewicz | dyndns | dynia | ebay | economy | ecowitt | ekonomia | elka | elm | emacs | emacs23 | english | ep | erasmus | erasmusplus | ess | eu | eurostat | excel | exif | exiftool | f11 | fc | fc11 | fc15 | fc29 | fc5 | fc8 | fedora | fedora21 | fenix | ffmpeg | finepix | firefox | flickr | folau | fontforge | fontspec | fonty | food | fop | forms | foto | france | francja | fripp | froggit | fuczki | fuji | fuse | gammu | garden | garmin | gas | gawk | gazwyb | gdańsk | gdynia | gender | geo | geocoding | georgia | gft | ggplot | git | github | gmail | gmaps | gnokii | gnus | google | google apps script | googlecl | googleearth | googlemaps | gotowanie | gphoto | gphoto2 | gps | gpsbabel | gpsphoto | gpx | gpx-viewer | greasemonkey | gruzja | grzyby | gus | gw1000 | haldaemon | handbrake | hhi | historia | history | hitler | holocaust | holokaust | hp1000se | hpmini | humour | iblue747 | ical | iiyama | ikea | imagemagick | imap | inkscape | inne | internet | j10i2 | javascript | jhead | k800i | kajak | kamera | karob | kleinertest | kml | kmobiletools | knuth | kociewie kołem | kod | kolibki | komorowski | konwersja | krutynia | krynki | kuchnia | kurski | latex | latex2rtf | latex3 | lcd | legend | lenny | lesund | lewactwo | lgbt-folly | liberation | linksys | linux | lisp | lisrel | litwa | lizbona | logika | ltr | lubowla | lwp | lwów | m2wś | malta | mapquest | mapsource | maradona | marchew | marimekko | marvell | math | mathjax | mazury | mbank | mediolan | mencoder | mevo | mh17 | michalak | michlmayr | microsoft | monitor | mp4box | mplayer | ms | msc | mssql | msw | mswindows | mtkbabel | museum | muzyka | mymaps | mysql | mz | nafisa | nanopi | natbib | navin | nekrolog | neo | neopi | netbook | niemcy | niemieckie zbrodnie | nikon | nmea | nowazelandia | nuc | nxml | oauth | oauth2 | obituary | ocr | odessa | okular | olympus | ooffice | ooxml | opera | osm | otf | otftotfm | other | overclocking | ozbekiston | panoramio | paryż | pdf | pdfpages | pdftex | pdftk | pedophilia | perl | photo | photography | picasa | picasaweb | pim | pine | pis | pit | plotly | pls | plugin | po | podlasie | podróże | pogoda | politics | polityka | polsat | portugalia | postęp | powerpoint | połtawa | prelink | problem | propaganda | pseudointeligencja | pstoedit | putin | python | pywws | r | r1984 | radio | random | raspberry | raspberry pi | raspberrypi | raspbian | refugees | relaxng | ridley | router | rower | rowery | rpi | rsync | rtf | ruby | rugby | rumunia | russia | rwc | rwc2007 | rwc2011 | rwc2019 | rzym | samba | sds011 | selenium | sem | sernik | sheevaplug | sienkiewicz | signature | sks | skype | skytraq | smoleńsk | sqlite | srtm | sshfs | ssl | staszek wawrykiewicz | statistcs | statistics | stats | statystyka | stix | stretch | supraśl | suwałki | svg | svn | swanetia | swornegacie | szwajcaria | słowacja | tbilisi | terrorism | tesseract | tex | texgyre | texlive | thunderbird | tomato | totalnaopozycja | tourism | tramp | trang | transylwania | truetype | trzaskowski | ttf | turcja | turkey | turystyka | tusk | tv | tv5monde | tweepy | twitter | tykocin | typetools | ubuntu | uchodźcy | udev | ue | ukraina | umap | unix | upc | updmap | ups | utf8 | uzbekistan | varia | video | vienna | virb edit | virbedit | vostro | wammu | wdc | wdfs | weather | weathercloud | webcam | webdav | webscrapping | weewx | wh2080 | wiedeń | wikicommons | wilno | win10 | windows | windows8 | wine | wioślarstwo | word | wordpress | wrt54gl | ws1080 | wtyczka | wunderground | ww2 | www | wybory | wybory2015 | włochy | węgry | xemex | xetex | xft | xhtml | xine | xml | xmllint | xsd | xslt | xvidtune | youtube | yum | zakopane | zakupy | zawodzie | zdf | zdrowie | zgony | łeba | świdnica | żywność
Archiwum
O stronie
wykorzystywany jest blosxom plus następujące wtyczki: tagging, flatarchives, rss10, lastbuilddatexhtmlmime. Niektóre musiałem dopasować nieco do swoich potrzeb. Więcej o blosxom jest tutaj
Subskrypcja
RSS 1.0
Manodona

Jednego dnia zmarli Maradona, Christophe Dominici oraz Zenon Plech. A przynajmniej jednego dnia media o tym poinformowały. Plech to lokalna polska gwiazda żużla. Dominici gwiazda francuskiego rugby, uczestnik słynnego meczu z Nową Zelandią w półfinale pucharu świata w 1999r. Maradona to wiadomo i (prawie) każdy czuł się w obowiązku poinformować o tym wydarzeniu swoją publiczność, nawet tacy co mają po 10 folowersów na Twitterze.

Dla mnie Maradona to oszust przede wszystkim i prymityw (w przeciwieństwie do Pelego na przykład). Każdy piłkarz pewnie ma na sumieniu faul w ważnym meczu, typu bramka ze spalonego, ale nie każdy popełnił faul aż tak oczywisty i bezczelny. Że to było dawno to większość nie kojarzy, ale wszyscy na stadionie będący dostatecznie blisko widzieli rękę, bo jak nie zobaczyć czegoś tak ordynarnego za wyjątkiem sędziego głównego + liniowego. Tak się dziwnie złożyło...

W piłce kopanej na turniejach o Puchar Świata jest (była?) w ogóle taka IMO patologia, że sędziują ludzie często słabi, bo z całego świata. Na co dzień sędziuje taki as ligę w Gwatemali dajmy na to, a raz w życiu będzie sędziował Niemcy vs Meksyk. Ten konkretny mecz sędziowali Tunezyjczyk + Bułgar (liniowy). Inne ćwierćfinały sędziowali wtedy: DDR-owiec, Rumun i Kolumbijczyk. No same mocne ligi na co dzień...

El mano to po hiszpańsku ręka jest właśnie. Na zdjęciu rzekomo kontrowersyjna sytuacja. Ona by była kontrowersyjna gdyby wepchnął piłkę w tłoku, albo byłaby wątpliwość czy ręką czy barkiem. Tak bywa... Ale tutaj? Dwóch ludzi skacze do piłki, i wszyscy widzę że ten co ma 160 w kapeluszu przeskakuje bramkarza. No ludzie...

url | Fri, 27/11/2020 04:37 | tagi: , ,
Farsy ciąg dalszy



Jak wiadomo w wyniku działań pewnego upierdliwego 19 latka okazało się, że sprawozdawczość MinZdrowia/GiS to farsa. Zadeklarowano w urzędzie wzw/ z tym nowe otwarcie: stary system zamknięto (he, he) nowy wystartował 23.11.2020. Przy okazji dodano do puli zakażonych 22594 przypadków wcześniej nie uwzględnionych (około 2,5%). Zatem oficjalnie 23-11-2020 było 10139 zakażeń na stronie MZ; ale wszyscy inni (ECDC na przykład) wpisują 32733 (czyli 10139 + 22594) no bo jak inaczej. W sumie to nawet ma sens, bo przecież baza odpowiada zakażeniem zarejestrowanym a nie, że tak powiem nabytym. Skoro je zarejestrowano 23-11-2020 to tyle ma być...

Pozostaje problem jak to rozliczyć na województwa. No więc ja chciałem rozliczyć tak, że do zakażeń z 23-11-2020 dodam te 22594 w proporcji do wielkości zakażeń z 23-11-2020. Ściągnąłem nowe-dobre dane ze strony wykaz-zarazen-koronawirusem i zacząłem od zsumowania zakażeń w województwach. Się okazało, że jest to inna liczba niż 10139. Kuźwa. W pliku z 24-11-2020 to samo...

No więc miało być lepiej a wyszło tak samo. Uprawnione jest w tym momencie pytanie czy ludzie nie potrafiący liczyć muszą akurat walczyć z pandemią i pracować w GiS/MZ? Załączam rysunki, żeby nie było że zmyślam. Liczenie zakażeń/zgonów wg województw na razie zawieszam skoro nie bardzo wiadomo co liczyć...

url | Thu, 26/11/2020 06:55 | tagi: , , ,
Tygodniowe dane nt. zgonów z GUS






GUS się wychylił niespodziewanie z dużą paczką danych nt. zgonów. Dane są tygodniowe, w podziale na płcie, regiony w klasyfikacji NUTS oraz 5 letnie grupy wiekowe.

Dane są udostępnione w formacie XSLX w dość niepraktycznej z punktu widzenia przetwarzania strukturze (kolumny to tygodnie/wiersze to różne kategorie agregacji: płeć, wiek, region), który zamieniłem na CSV o następującej prostej 7 kolumnowej strukturze:

year;sex;week;date;age;geo;value

W miarę oczywiste jest, że year to rok, sex to płeć, week to numer tygodnia, date to data pierwszego dnia tygodnia (poniedziałek), geo to identyfikator obszaru a value liczba zgonów odpowiadająca kolumn 1--6. Ten plik jest podzielony na lata bo w całości zajmuje circa 200Mb. Umieściłem go tutaj.

Skrypt też w R wymodziłem co wizualizuje zgony wg grup wieku oraz województw. Ponieważ kombinacji płeć/wiek/region są setki, moje wykresy dotyczą zgonów ogółem/kobiet/mężczyzn w podziale na grupy wiekowe oraz ogółem w podziale na województwa. Każdy wykres zawiera dwa szeregi: liczbę zgonów w 2020 roku oraz średnią liczbę zgonów z lat 2015--2019. Ponadto jest wykres z jedną krzywą: procent liczony dla stosownych tygodni jako liczba zgonów w 2020 przez średnią 5 letnią z lat 2015--2019. Ten wykres występuje też w wariancie skróconym: tylko 6 ostatnich tygodni, co pozwala dodać do punktów wartości liczbowe (które nie zachodzą na siebie).

library("ggplot2")
library("dplyr")
library("scales")
library("ggthemes")
library("ggpubr")
library("tidyr")

picWd <- 12
spanV <- 0.5
GUS.url <- "https://stat.gov.pl/obszary-tematyczne/ludnosc/ludnosc/zgony-wedlug-tygodni,39,2.html"
NIKW.url <- "(c) NI-KW @ github.com/knsm-psw/GUS_mortality"
NIKW <- sprintf ("%s | %s", GUS, NIKW.url)

z <- read.csv("PL-mortality-2015.csv", sep = ';',  header=T, na.string="NA" )
lastO <- last(z$date)
lastT <- last(z$week)

nuts <- c('PL21', 'PL22', 'PL41', 'PL42', 'PL43', 'PL51', 'PL52', 'PL61', 'PL62',
'PL63', 'PL71', 'PL72', 'PL81', 'PL82', 'PL84', 'PL91', 'PL92')

### Ogółem
z00 <- z %>% filter ( sex == 'O'  & geo == 'PL' ) %>% as.data.frame

z0 <- z00 %>% filter ( year >= 2015  & year < 2020 ) %>% as.data.frame
z1 <- z00 %>% filter ( year == 2020 ) %>% as.data.frame

## średnie w okresie 1 -- (n-1)
zz0 <- z0 %>% group_by(age,week) %>% summarise( year = 't19',
  vv = mean(value, na.rm=TRUE)) %>% as.data.frame
zz1 <- z1 %>% group_by(age,week) %>% summarise( year = 't20',
  vv = mean(value, na.rm=TRUE)) %>% as.data.frame
### Połącz
zz1 <- bind_rows(zz0, zz1)

farbe19 <- '#F8766D'
farbe20 <- '#00BFC4'

p1 <- ggplot(zz1, aes(x=week, y=vv, color=year)) +
 geom_smooth(method="loess", se=F, span=spanV, size=.4) +
 geom_point(size=.4, alpha=.5) +
 facet_wrap( ~age, scales = "free_y") +
 xlab(label="") +
 ylab(label="") +
 ##theme_nikw()+
 theme(plot.subtitle=element_text(size=9), legend.position="top")+
 scale_color_manual(name="Rok: ", labels = c("średnia 2015--2019", "2020"), values = c("t19"=farbe19, "t20"=farbe20 )) +
 ggtitle("Zgony wg grup wiekowych (PL/Ogółem)", subtitle=sprintf("%s | ostatni tydzień: %s", NIKW, lastO) )

ggsave(plot=p1, "zgony_PL_by_age_O.png", width=picWd)

### M ###
z00 <- z %>% filter ( sex == 'M'  & geo == 'PL' ) %>% as.data.frame

z0 <- z00 %>% filter ( year >= 2015  & year < 2020 ) %>% as.data.frame
z1 <- z00 %>% filter ( year == 2020 ) %>% as.data.frame

## średnie w okresie 1 -- (n-1)
zz0 <- z0 %>% group_by(age,week) %>% summarise( year = 't19',
  vv = mean(value, na.rm=TRUE)) %>% as.data.frame
zz1 <- z1 %>% group_by(age,week) %>% summarise( year = 't20',
  vv = mean(value, na.rm=TRUE)) %>% as.data.frame
### Połącz
zz1 <- bind_rows(zz0, zz1)

p2 <- ggplot(zz1, aes(x=week, y=vv, group=year, color=year)) +
 geom_smooth(method="loess", se=F, span=spanV, size=.4) +
 geom_point(size=.4, alpha=.5) +
 facet_wrap( ~age, scales = "free_y") +
 xlab(label="") +
 ylab(label="") +
 ##theme_nikw()+
 ##labs(caption=source) +
 theme(plot.subtitle=element_text(size=9), legend.position="top")+
 scale_color_manual(name="Rok: ", labels = c("średnia 2015--2019", "2020"),
   values = c("t19"=farbe19, "t20"=farbe20 )) +
 ggtitle("Zgony wg grup wiekowych (PL/Mężczyźni)", subtitle=sprintf("%s | ostatni tydzień: %s", NIKW, lastO) )

ggsave(plot=p2, "zgony_PL_by_age_M.png", width=picWd)


### K #########################################
z00 <- z %>% filter ( sex == 'K'  & geo == 'PL' ) %>% as.data.frame

z0 <- z00 %>% filter ( year >= 2015  & year < 2020 ) %>% as.data.frame
z1 <- z00 %>% filter ( year == 2020 ) %>% as.data.frame

## średnie w okresie 1 -- (n-1)
zz0 <- z0 %>% group_by(age,week) %>% summarise( year = 't19',
  vv = mean(value, na.rm=TRUE)) %>% as.data.frame
zz1 <- z1 %>% group_by(age,week) %>% summarise( year = 't20',
  vv = mean(value, na.rm=TRUE)) %>% as.data.frame
### Połącz
zz1 <- bind_rows(zz0, zz1)

p3 <- ggplot(zz1, aes(x=week, y=vv, group=year, color=year)) +
 geom_smooth(method="loess", se=F, span=spanV, size=.4) +
 geom_point(size=.4, alpha=.5) +
 facet_wrap( ~age, scales = "free_y") +
 xlab(label="") +
 ylab(label="") +
 ##theme_nikw()+
 ##labs(caption=source) +
 theme(plot.subtitle=element_text(size=9), legend.position="top")+
 scale_color_manual(name="Rok: ", labels = c("średnia 2015--2019", "2020"),
   values = c("t19"=farbe19, "t20"=farbe20 )) +
 ggtitle("Zgony wg grup wiekowych (PL/Kobiety)", subtitle=sprintf("%s | ostatni tydzień: %s", NIKW, lastO) )

ggsave(plot=p3, "zgony_PL_by_age_K.png", width= picWd)

### ogółem wg województw #####################################
n <- read.csv("nuts.csv", sep = ';',  header=T, na.string="NA" )
## dodaj nazwy
z <- left_join(z, n, by='geo')

## wiek razem
z00 <- z %>% filter ( sex == 'O' & geo %in% nuts & age == 'OGÓŁEM') %>% as.data.frame

z0 <- z00 %>% filter ( year >= 2015  & year < 2020 ) %>% as.data.frame
z1 <- z00 %>% filter ( year == 2020 ) %>% as.data.frame

## średnie w okresie 1 -- (n-1)
zz0 <- z0 %>% group_by(name,week) %>%
 summarise( year = 't19', vv = mean(value, na.rm=TRUE)) %>% as.data.frame
 zz1 <- z1 %>% group_by(name,week) %>%
  summarise( year = 't20', vv = mean(value, na.rm=TRUE)) %>% as.data.frame
### Połącz
zz1 <- bind_rows(zz0, zz1)

lastWeek <- last(zz1$week)
firstWeek <- lastWeek - 6

zz1 <- zz1 %>% filter ( week >= firstWeek  ) %>% as.data.frame
print(zz1)

p4 <- ggplot(zz1, aes(x=week, y=vv, group=year, color=year)) +
 geom_smooth(method="loess", se=F, span=spanV, size=.4) +
 geom_point(size=.4, alpha=.5) +
 facet_wrap( ~name, scales = "free_y") +
 xlab(label="") +
 ylab(label="") +
 ##theme_nikw()+
 ##labs(caption=source) +
 theme(plot.subtitle=element_text(size=9), legend.position="top")+
 scale_color_manual(name="Rok: ", labels = c("średnia 2015--2019", "2020"),
   values = c("t19"=farbe19, "t20"=farbe20 )) +
 ggtitle("Zgony wg województw* (PL/Ogółem)", 
   subtitle=sprintf("*wg klasyfikacji NUTS stąd mazowieckie/stołeczne | %s | ostatni tydzień: %s", NIKW, lastO))

ggsave(plot=p4, "zgony_PL_by_woj_O.png", width=picWd)

## jako %% w średniej w poprzednich 5 lat

zz1 <- zz1 %>% spread(year, vv)

zz1$yy <- zz1$t20 / zz1$t19 * 100

p5 <- ggplot(zz1, aes(x=week, y=yy), color=farbe20) +
 geom_smooth(method="loess", se=F, span=spanV, size=.4, color=farbe20) +
 geom_point(size=.4, alpha=.5) +
 facet_wrap( ~name, scales = "fixed") +
 xlab(label="nr tygodnia") +
 ylab(label="%") +
 theme(plot.subtitle=element_text(size=9), legend.position="top")+
 scale_color_manual(name="Rok 2020: ", labels = c("% 2020/(średnia 2015--2015)"),
   values = c("yy"=farbe20 )  ) +
 ggtitle("Zgony wg województw* (PL/Ogółem)", 
   subtitle=sprintf("*wg klasyfikacji NUTS stąd mazowieckie/stołeczne | %s | ostatni tydzień: %s", NIKW, lastO))

ggsave(plot=p5, "zgony_PL_by_woj_P.png", width=picWd)

zz1 <- zz1 %>% filter ( week >= firstWeek  ) %>% as.data.frame

p6 <- ggplot(zz1, aes(x=week, y=yy), color=farbe20) +
 geom_smooth(method="loess", se=F, span=spanV, size=.4, color=farbe20) +
 geom_point(size=.4, alpha=.5) +
 geom_text(aes(label=sprintf("%.1f", yy)), vjust=-1.25, size=1.5) +
 facet_wrap( ~name, scales = "fixed") +
 xlab(label="nr tygodnia") +
 ylab(label="%") +
 theme(plot.subtitle=element_text(size=9), legend.position="top")+
 scale_color_manual(name="Rok 2020: ", labels = c("% 2020/(średnia 2015--2015)"),
   values = c("yy"=farbe20 )  ) +
   ggtitle(sprintf("Zgony wg województw* (PL/Ogółem) tygodnie: %i--%i (%i tydzień zaczyna się %s)",
     firstWeek, lastWeek, lastWeek, lastO), 
   subtitle=sprintf("*wg klasyfikacji NUTS stąd mazowieckie/stołeczne | %s", NIKW))

ggsave(plot=p6, "zgony_PL_by_woj_P6.png", width=picWd)

url | Mon, 23/11/2020 17:26 | tagi: , , , ,
Znowu bursztyn w Mikoszewie

Pojechaliśmy w tą sobotę z MK zbierać bursztyn do Mikoszewa. Ponieważ miałem zajęcia, to dotarliśmy tam dopiero około 17:00 czyli było już ciemno. Okazało się że jesteśmy trochę późno, bo wysyp był 24h wcześniej (ale chyba niezbyt obfity)...

My zastaliśmy masę patyków na brzegu, a w nich miliony kawałków bursztynu, tyle że takie nalewkowe i mniejsze. Przez dwie godziny nazbieraliśmy tego prawie 600g (ja tym razem więcej bo 320g a MK 260g.)

url | Mon, 23/11/2020 05:17 | tagi: ,
Koniec PiSu?






Taka książka jest pn 'Koniec PiSu' (Mrozowski rozmawia z Kamińskim). Całkiem nadająca się do czytania BTW, bo tak jak nie cenię autorów, to w tym przypadku nie poszli w tanie hejterstwo. Książka z 2012 roku, okazawszy się raczej marnym proroctwem, stała się przedmiotem śmichów-chichów, ale wygląda że -- być może -- co się odwlecze to nie uciecze.

Od razu zaznaczę, że od zawsze popieram PiS a młodszym przypomnę, że do roku 2015 była to beznadziejna sprawa--zawsze wpiernicz i nigdy nie miałem wątpliwości na kogo głosować. Do teraz...

Teraz bym nie zagłosował, co więcej nawet gdyby wybory się odbyły za trzy lata to na dziś wygląda że też bym nie zagłosował. Nie to że mi się spodobał p. Budka czy p. Hołownia. Nie, nie głosowałbym wcale. Moi idole przegięli pałę...

Po pierwsze i najważniejsze: nie potrafię wytłumaczyć co konkretnie chciał osiągnąć Jarosław Kaczyński proponując ustawę w/s ochrony praw zwierząt. Nie można z piątku na sobotę powiedzieć ludziom i to ludziom ze środowiska, bez którego nie byłoby zwycięstwa partii PiS w ostatnich wyborach: Mamy w dupie czy wzieliście kredyty na 5 lat czy na 15 lat, macie rok na to żeby się zwijać. Nie mogę tego nazwać inaczej niż bezczelnością/butą/oderwaniem się od rzeczywistości. Nie znajduję też innego wytłumaczenia, że taki pomysł w ogóle się pojawił, jak uwiąd intelektualny JK...

Ustawa oprócz tego, że szkodzi interesom ekonomicznym wsi (i nie tylko) jest głupia w każdym praktycznie aspekcie, oprócz tego, pod którym jest szerzej znana. Bo znana jest jako futerkowa czyli zakazująca hodowli zwierząt futerkowych, tyle że akurat zakaz hodowli zwierząt futerkowych byłby OK (pod warunkiem oczywiście wyrównania strat ekonomicznych hodowcom). To co uważam za największy idiotyzm `ustawy futerkowej', to zakaz uboju rytualnego. Lewacka logika 101: multikulti ale bez halal. Bardzo was lubimy, ale tego/tamtego wam nie wolno. Wygląda że na starość p. Bóg odebrał rozum prezesowi. Nie jest naszą sprawą ocena/zakazy tego co 1/3 ludzkości uważa za normalne.

Po drugie: tzw. rekonstrukcja rządu. Zapowiadana, odwlekana, wreszcie zrealizowana w jakimś dziwnym trybie. Świetnych ministrów usunięto, zastępując ich jeszcze lepszymi (ironia); podpisano uroczyste i kuriozalne porozumienie. Kuriozalne bo przecież nie programowe--program był ogłoszony w 2019 a my zawsze dotrzymujemy słowa. Więc w TV pokazano uroczyste porozumienie w/s podziału stanowisk. Tzn. pokazano jak podpisują, co podpisują już nie pokazano. No wspaniale... Bezczelność i buta #2.

A że p. Bóg karze za głupotę i bezczelność to ledwo poprzydzielano fotele nowym/starym (złotousty-Gowin) zaczęła się pandemia. Gołym okiem widać panikę i brak planów tych nowych wspaniałych jeszcze lepszych od starych wspaniałych. W lecie kiedy był czas na przygotowanie się (choćby w trybie symulacji -- co zrobić jak będzie druga fala epidemii) to rządzący zajęci byli `rekonstrukcją'/ustawą futerkową. Teraz improwizują.

Jeden tylko przykład: do 29 października zapowiadają w telewizjach, że nie będzie zakazu wstępu na cmentarze; 30 października premier oznajmia że będzie zakaz. Kłamie przy tym bezczelnie, że mieli nadzieję, że pandemia wygaśnie (na jakiej podstawie? Że się cud Boski zdarzy?) Potem widocznie komuś w KPRM się przypomina, że na lodzie została kolejna grupa przedsiębiorców a premier nic im nie obiecał, więc wieczorem naprędce wydają uzupełniający komunikat, że im się też zrekompensuje, ale w jaki sposób konkretnie, to będzie później (bo teraz to sami nie wiemy?). Następnego dnia jest komunikat w/s tego później: Agencja Restrukturyzacji i Modernizacji Rolnictwa będzie skupować kwiaty (są już żarty, że w grudniu będą odkupować choinki i karpie). Ponieważ większość tych przedsiębiorców to drobni handlarze prowadzący działalność nierejestrowaną/ryczałt/handel obwoźny, to ciekawe jak Agencja ustali komu/ile się należy. Kto bezczelny dostanie, kto uczciwy obejdzie się smakiem?

Jak to nie jebnie to będzie cud-boski. Ale jak ten cud się zrealizuje to będzie tylko trwanie, ten rząd już niczego nie zrealizuje, więc nie wiadomo co lepsze: trwanie czy upadek.

Nawiasem i na koniec: akurat protesty po wyroku TK ws aborcji eugenicznej (wbrew wielkim nadziejom antyPiSu) mają -- moim zdaniem -- niewielkie szanse na sukces. Gołym okiem widać głupotę protestujących (wulgarność, atakowanie kościołów i podobnych obiektów, które należy zostawić w spokoju a demonstrować gdzie indziej, bezsensowne blokowanie ruchu na ulicach itd/itp). Sama szefowa, bliżej mi nieznana 41-letnia Marta Wypierdalać-Lampart wygląda na osobę mocno intelektualnie ograniczoną za to o dużych ambicjach (nieciekawy mix jak wiadomo). Sam fakt że w wieku 41-lat niewiele osiągnęła wskazuje, że coś z nią jest nie tak. A co konkretnie to niedługo się okaże, jak to wszystko pizdnie. Ot KOD/Kijowski season 2020, skończą podobnie...

Dopisek z ostatniej chwili: ustawa futerkowa z powodu której: 1) grożono rozpadem koalicji; 2) usunięto ze stanowiska ministra rolnictwa; 3) zawieszono iluś tam posłów, idzie do kibla. Czyli była do dupy. Czyli `nieomylny/genialny' prezes...?

url | Sun, 01/11/2020 04:27 | tagi: ,
Eldorado w Mikoszewie


Mój bursztynowy przywódca M. już na początku tygodnia uprzedził mnie o nadchodzącym sztormie, który miał ucichnąć pod koniec tygodnia. Faktycznie wiało i do tego prawie-że-idealnie bo z północnego wchodu. W czwartek 15.10 wiatr ucichł więc pojechałem rowerem na Sobieszewo (po drodze zaglądając też na Brzeźno). Że to względnie daleko i mi się nie chciało jechać na Orle, to tym razem pojechałem na parking w Sobieszewie (wejście numer 16). Stali tam już ludzie z podbierakami, ale niewiele się jeszcze działo. Kolega M. zarządził wyjazd na wieczór...

Jak przyjechaliśmy było jeszcze szaro ale szybko zapadła noc. Fala była jeszcze duża i trzeba było uważać. Udało mi się wyłowić 17g bryłkę i parę jeszcze ładnych kawałków, po czym złamałem podbierak. Bez podbieraka nie szło już tak dobrze ale trochę dozbierałem więc generalnie byliśmy zadowoleni, zwłaszcza że w tym roku do tej pory praktycznie zero mimo kilku prób. Bursztyn wymywało dosłownie na odcinku 30m; jak przestało poszliśmy do domu. Rano w piątek 17.10 powtórka, ale było słabo. Wg. M. za duża fala była ciągle--umówiliśmy się na wieczór.

Wieczorem też nieszczególnie. Mało i małe. Wracamy do domu jest 22:00. A M. żebyśmy jechali do Mikoszewa. Ja na to że mi się nie chce, ale że namawiał to mówię OK. Pierwszy raz jedziemy na Mikoszewo ale trafiamy bez pudła-- jest 23:00 jak wychodzimy na plażę. Kupa luda. Cała plaża na fioletowo. W świetle latarki UV widać pełno leżącego na piasku bursztynu--takie kawałki wielkości pestki od jabłka albo trochę większe (i mniejsze). Są tego miliony... Większe też się trafiają ale oczywiście trzeba wejść do wody. Zbieramy do 1:00 w nocy, w domu jestem o 2:00. Mam 170g uzbierane (Sobieszewo/Mikoszewo)

W Sobotę M. nie może, jadę sam rano rowerem z kaloszami w plecaku. Primo chcę zobaczyć jak wygląda plaża bo wczoraj to byliśmy w nocy. Po drugie porobić zdjęcia mając nadzieję na dzikie tłumy + (być może) policję (pandemia jest). Przyjeżdżam 9:30-- plaża cała w śmieciach. Ludzi jest sporo ale nie aż tak za bardzo (potem doszło więcej, tyle że dużo spacerowiczów i słoikowców tj. zbieraczy okazjonalnych, bez sprzętu). Ubieram kalosze i zbieram z brzegu oraz kopię w grubej warstwie śmieci. Nb. że nie mam woderów, to akurat no-problem, bo woda jest tak mętna że i tak wszyscy co stoją w wodzie zbierają max 2m od linii brzegowej, patrząc w stronę plaży. A jest mętna, bo pływa pełno wodorostów o konsystencji rozmoczonej waty (które w świetle UV wczoraj wyglądały jak buraki, ponieważ zielony zmienia się w bordowy)

Do 13:00 w tym stylu i tym sprzętem uzbierałem 340g! Melduję M. co widziałem. Od razu chce jechać, ja mniej bo od 30 godzin na nogach! Pojechaliśmy wieczorem. Dozbierałem następnych 190g. Bursztyn ciągle wymywa i jest fala. Okruchów jest tyle na piasku, że można by do rana siedzieć i kilo uzbierać (tylko po co?)

Niedziela 18.10. Jeszcze raz do Mikoszewa. Tym razem z Elką i Jankiem. Nie ma fali. W wodzie już nic nie ma--czysta. Na brzegu jedno miejsce gdzie grubo śmieci--tam kopią i znajdują większe kawałki takie wielkości ziarnka grochu. W innych miejscach generalnie przekopana albo śmiecie odpłynęły. Mimo to 120g zebraliśmy...

Reasumując w ten szalony weekend uzbierałem 170+190+340+120 = prawie 900g bursztynu. Smak sukcesu psuje fakt, że 90% to drobnica. Inni też się obłowili sądząc po wpisach na FB grupie zbieraczy. Mocny początek sezonu.

Zdjęcia są tutaj

url | Wed, 21/10/2020 05:51 | tagi: ,
Rektor UG Gwizdała (były)

Pracowałem na WZ/UG to mnie nie dziwi. Z mediów się dowiedziałem że rektor UG okazał się marnym plagiatorem, w sumie bez dorobku (brak publikacji zagranicznych). Marnym w tym sensie także, że szedł na rympał z gołą dupą czyli z ww. żenującym dorobkiem i do tego jeszcze przepisanym w części od kogoś (szczegóły tutaj.)

Szokujące może być (ale tylko dla kogoś kto nie wie jak środowisko nauki jest zdemoralizowane, szczególnie w PL), że powyższe nie przeszkadzało wcale Radzie Wydziału Zarządzania i osobiście dziekanowi ww wydziału (chyba podwładnemu zresztą ww. Gwizdały) promować tego pana. Więcej wszystkie te opłacane przez podatnika i stojące na straży jakości instytucje typu Rada Wydziału, pierdzilion recenzentów + Centralna Komisja d/s czegoś tam jakoś nie dały rady odsiać ziarna od plew, że dopiera donos to kancelarii Prezydenta zakończył wspaniałą karierę magnificencji.

url | Tue, 06/10/2020 16:52 | tagi:
Kaszebe Runda 2020 (pandemiczna)

Mijamy Betlejem

Zdecydowałem się na start na średnim dystansie. Trochę poruta, ale 200 km to dla mnie ciut za dużo zwłaszcza w tym roku. Na stronie jest 1164 zgłoszeń z czego 1010 opłaconych. Do tego: każdy wchodzący do biura zobowiązany jest do poddania się pomiarowi temperatury, zasłonięcia ust i nosa i utrzymania dystansu społecznego w wyznaczonych strefach bezpieczeństwa. Biorąc pod uwagę, że te pomiary i strefy mogą spowodować tłok i bałagan na starcie, zarządzam pobudkę na 4:00 rano.

No więc pojechaliśmy z Elką 4:30 do Kościerzyny żeby na spokojnie wystartować z pierwszą grupą o 7:00 (średni dystans czyli 125km oficjalnie ale chyba w rzeczywistości 5km mniej). Przyjechaliśmy na miejsce jakoś tak 5:30. Generalnie pustki. Z tą temperaturą to lipa była--nikt nie mierzy. Ale za to start kawałek od biura. Zanim się przebrałem, przyczepiłem numer, znalazłem start itd. to w sumie już było 20 minut przed siódmą.

Na starcie tłoku nie ma. Pojechałem jak planowałem z pierwszą grupą--nie wiem czy nas 15 było, no może. Po chwili już było tak na oko z 10. W tym składzie dojechaliśmy do pierwszego bufetu, bo ten wyścig ma taką oto specyfikę że są po drodze bufety gdzie można się pożywić regionalnymi specjałami. Tym razem z tych specjałów to był tylko smalec+ogórek konserwowy+jajecznica. Słabo ale, że nie jadłem śniadania ani nic nie wziąłem do jedzenia, to zjadłem trochę tej jajecznicy + kawałek chleba i ogórek (słony) Większość z naszej grupy na tym bufecie została (konsumując?) a dalej pojechaliśmy w trzech.

Następny przystanek też smalec+ogórek, tyle że kawy nie ma. Pojechaliśmy już dalej we dwóch. Trzeci bufet olaliśmy antycypując że tam też smalec. Zresztą tłum tam był, bo trasa już była wspólna od pewnego czasu z dystansem 55km. BTW dzięki temu zrobiło się trochę mniej nudniej, bo co chwila kogoś wyprzedzaliśmy. Ostatni bufet stajemy bo trzeba coś jednak zjeść. Znowu smalec, więc chwilę tylko tu stoimy i jedziemy dalej. Wreszcie za Betlejem (jest taka wieś na Kaszubach) dogoniliśmy gościa o porównywalnym z naszym tempie. Więc dalej we trzech ciagle mijając tych zmagających się z 55km.

Meta tak z zaskoczenia przyszła, bo patrząc na GPSa myślałem że jeszcze trochę mam do przejechania. A tu za zakrętem jakaś tablica świetlna się pojawiła. To chyba meta jest? W rzeczy samej...

Podium nazwijmy to (gdzie medale dawali) było w jeszcze jednym miejscu, a makaron jeszcze w innym dawali. Że widziałem kilkunastu ludzi, którzy wyglądali na takich co jadą 120km, a 3/4 trasy przejechaliśmy w dwóch/trzech to myślałem, że frekwencja katastrofa a ja tym samym osiągnąłem światowy wynik :-) ale nie -- okazało się, że w kategorii jechało prawie 200, a ja skończyłem na 21 miejscu. Całkiem nieźle anyway...

Po wyścigu i zjedzeniu makaronu wróciłem do domu DK20. Razem wyszło zatem 120+65 = 185km czyli prawie tyle co max-dystans w Kaszebe Runda, ale przyznam się że od Rębiechowa, to ledwo kręciłem pedałami i całe szczęście że od tego miejsca do domu to generalnie z góry jest. Kompletnie uszło ze mnie powietrze. Jednak dystans średni to była racjonalna decyzja...

Po długiej przerwie skorzystałem ze swojej kamery. Wyszło 90Gb filmu, który zamieniłem na 6Gb w niskiej rozdzielczości podzielone na trzy kawałki. Dodałem dane telemetryczne z pliku FIT za pomocą VirbEdit Garmina (próbowałem konkurencyjnego dashware, ale poległem na synchronizacji śladu z wideo; dla mnie to niewykonalne w dashware.)

No więc wyniki są tutaj (skopiowane ze strony organizatora i posortowane). Mój wynik konkretnie to: 27.67km/h i czas 4:20 Ślad GPS tutaj a film z trasy (w trzech częściach) tutaj tutaj oraz tutaj.

url | Sat, 26/09/2020 10:23 | tagi: , ,
Ciasto z cukinii

Wariant ciasta z dynią. Wczoraj zrobiłem i wszyscy zachwyceni.

Generalnie to wykonałem przepis ze strony https://beszamel.se.pl/ciasta-z-orzechami/niedzielne-ciasto-z-cukinii,7928/, ale ze zmianami. Oryginał to 3 szklanki startej cukinii + 3 szklanki mąki + 3 jajka + 1 szklanka oleju + 1,5 szklanki cukru + 2 łyżeczki cynamonu + 2 łyżeczki cukru waniliowego + łyżeczka proszku do pieczenia + garść orzeczów włoskich. Wszystko się miesza i piecze w 220C przez 60 min.

Mój zmodyfikowany przepis zachowuje proporcje głównych składników: 2 szklanki cukinii (około 400g) + 2 szklanki mąki i karobu (2 łyżki karobu; reszta mąka). Cukinię ścieram a wodę odlewam więc trzeba znacząco więcej zetrzeć żeby wyszło 2 szklanki, bo cukinia wodnista jest. Dwa jajka skoro po dwie szklanki mąki/cukinii...

Cukru moim zdaniem za dużo jest, podobnie jak oleju. Pół szklanki oleju + trochę więcej niż pół szklanki cukru (ja sypię ksylitol dla zdrowotności). Czubata łyżeczka proszku do pieczenie i taka sama sody. Łyżeczka cynamonu. Orzechy ziemne/włoskie według uznania, czyli garść minimum, ale może być więcej. Dodaję garść rodzynek (ulubionych uzbeckich, takich małych czarno--granatowych.)

Cukinię mieszam z mąką i karobem. Jajka, olej i cukier mieszam intensywnie. Wlewam do cukinii z mąką dodaję proszek, sodę i bakalie. Konsystencja od razu mi wyszła prawidłowa i nie musiałem nic dolewać...

Piekę jak w oryginalnym przepisie 220C przez 60minut.

url | Thu, 10/09/2020 16:12 | tagi: , ,
Wolność słowa i casus Radia Nowy Świat

Cała sprawa miała swój początek w trakcie jednego z serwisów informacyjnych Radia Nowy Świat (RNS). Podający się za kobietę Michał Sz., ps. "Margot", został określony jako mężczyzna. Stacja została za to ostro skrytykowana.

W obronie [..] stanął prezes spółki zarządzającej Radiem Nowy Świat Piotr Jedliński: Jeżeli Margot oraz akolici tak bardzo apelują o poszanowanie wolności, to dlaczego nie szanują wolności mediów oraz mojej, jako osoby? Dlaczego chcą mi na siłę narzucić sposób postrzegania świata, zmuszając, żebym określał kogoś, kogo odbieram jako mężczyznę, zaimkami żeńskimi?

To nic nie zmieniło a nawet od wypowiedzi prezesa odcięła się reszta: Zastosowana przez nas forma męskoosobowa ("aktywista") w odniesieniu do Margot była nieintencjonalnym błędem, który w żadnej mierze nie definiuje stanowiska Radia Nowy Świat wobec wspomnianych osób i wydarzeń. Nasz zespół składa się z osób zróżnicowanych pod względem wieku, przekonań, koloru skóry oraz orientacji seksualnej i jesteśmy świadomi, że to właśnie różnorodność stanowi siłę Radia Nowy Świat. W tym kontekście pragniemy podkreślić, że wpis Piotra Jedlińskiego jest jego prywatną opinią.

Jedliński próbował wyjaśniać składając samokrytykę i używając `właściwej' formy: Szanowni Państwo, Odpowiadając na zarzuty wywołane formą gramatyczną, w jakiej w serwisach RNŚ mówiono o Margot, miałem na celu obronę niezależności naszego radia także przed naciskami opinii publicznej. Jednak dalsze działania władzy wobec Margot, zwłaszcza osadzenie jej w areszcie dla mężczyzn, ze skandalicznym komentarzem jednego z polityków, istotnie zmieniło w moich oczach kontekst całej sprawy. Nie zamierzałem i nie zamierzam bronić prześladowania mniejszości przez władze. Nie zamierzałem dołączać do prześladujących. Nie wycofując się z wiary w wartość bycia niezależnym, w dzisiejszym konflikcie między prześladującymi i prześladowanymi jestem po stronie prześladowanych.

Mimo to było już za późno na `samokrytykę'. W poniedziałek po godz. 22 Radio Nowy Świat poinformowało w mediach społecznościowych, że Jedliński zrezygnował z funkcji prezesa.

Czyli klasyka, jak za Stalina. Najpierw samokrytyka a potem w piach. Oczywiście za Stalina fizycznie, teraz tylko gość traci pracę. Czasy się zmieniły nie ma potrzeby na bardziej radykalne środki.

Dla przypomnienia RNS powstało, bo dziennikarze uważali że usunięcie piosenki Kazika `Twój ból jest lepszy niż mój' to cenzura, ograniczanie wolności słowa itp. Odeszli z gnębionej przez PiS Trójki i założyli radio `niezależne'.

Teraz uważają że wszystko jest w porządku...

W tzw. międzyczasie Szutowicz (czyli ten Sz.) awansował na `osobę niebinarną': Michał Sz. to osoba niebinarna identyfikująca się jako kobieta i posługująca pseudonimem Margot. W dokumentach ma nadal wpisaną płeć męską. (NB osoba-niebinarna https://en.wikipedia.org/wiki/Non-binary_gender#History wydaje się być kreacją takich właśnie Szutowiczów, bo próżno na stronie Wiki odszukać choć jeden poważny tekst nauki na temat (Psychologia to nie nauka albo inaczej zbyt dużo tam jest ideologii i oszustw żeby się bezkrytycznie podpierać każdym tekstem z tej dziedziny).

Pomimo wielkiej kariery medialnej Szutowiczem słabo interesują się media: `aktywista LGBT' oczywiście, `osoba niebinarna', 24-lata to już trzeba sporo się natrudzić żeby odszukać. Studiował nie-wiadomo-co na UW (nie dziwi). Związany z osobą określającą się jako lesbijka. Tyle ma wystarczyć.

To słabe zainteresowanie zwłaszcza brukowców czy TV no dziwi. Normalnie takie dziwo jest prześwietlane od urodzenia albo i wcześniej. Są wywiady z byłymi sympatiami, opisy z dzieciństwa, itd. Zdolny wrażliwy, wiersze pisał itd/itp. Albo zepsuty do cna od zawsze. To się przecież sprzedaje...

A tu nic.

I jeszcze p. niedoRzecznik Bodnar na koniec kariery postanowił się ośmieszyć ostatecznie nie tylko określając nie wiedzieć czemu Szutowicza jako kobietę (o zmianie płci w PL decyduje sąd), ale jeszcze pisząc jakieś nonsensowne raporty z wizytacji w pierdlu `u Margot', w którym to pierdlu zapewne jest znany jako Szutowicz, a o jakiejś Margot nikt nie słyszał -- więc po co ta komedia?

Wreszcie: cała afera powstała bo ww. Szutowicz został osadzony na 2 miesiące za czyny chuligańskie co do czego nikt poza ostatnimi kretynami nie ma wątpliwości. Więc broni się Szutowicza inaczej: że zatrzymanie było nie-ten-teges (brutalne), że 2 miesiące sankcji to za dużo (ale 3 lata dla Macieja Dobrowolskiego za nic dla tych samych ludzi to OK oczywiście wtedy -- za Tuska -- było), że siedzi w męskim pierdlu (ale ciekawe nikt z zatroskanych tj. GW/TVN, itd się nie pyta czy `panie osadzone' na oddziałach żeńskich chciałby siedzieć z `niebinarnym' facetem? Albo do jakiej publicznej toalety chodził do tej pory Szutowicz, który wizualnie wygląda jak facet dodam). Kretyni `nieostatni' wymyślają teorie, że kryminalna działalność Szutowicza jest politycznie motywowana i jako taka usprawiedliwiona: Margot jest wandalką [słowo oznaczone jako błędne w słowniku aspell BTW i słusznie, bo Wandale to byli faceci, ale politniepoprawne :-)] w podobny sposób, jak wandalami byli powstańcy malujący Kotwicę na murach. (przy okazji: od malowania to był mały sabotaż za tzw. okupacji a powstanie to polegało na strzelaniu raczej, ale wymagać od ąę-kretyna z wielkiego miasta żeby to wiedział, to za dużo przecież)...

Że współczesny świat (zachodu) zmierza do chaosu o czym świadczą (porządek dowolny): dezinformujące globalne media (stare upadające + nowe elektroniczne); zdegenerowana nauka (zdominowana przez ideologię oraz pieniądze/korporacje). dziwna ekonomia (na przykład ujemne stopy procentowe), pseudo-pandemia (globalny i rujnujący lockdown), wojna/rewolucja kulturowa (w tym potępienie w czambuł białego człowieka), wojna o świeże powietrze (św. Greta z Thundberg, z którą mają obowiązek konsultować się przywódcy państw), to teksty na tematy polityczne będę oznaczać jako chaos.

url | Wed, 12/08/2020 05:29 | tagi: , , ,
Master-plan Jacka Sasina

Przyznam się że typa nie lubię. Oceniam go jako nietypowego partyjnego aparatczyka: mierny ale wierny, tyle że nie bierny (w tym sensie nietypowy, co w połączeniu z cechą pierwszą powoduje, że nawet gorszy niż ten co niewiele robi). Sasin działa. Jest gwiazdą TV (nie oglądam wywiadów z tą gwiazdą). Jest także autorem dwóch projektów, które zapamiętałem: 1) zmiana granic okręgów wyborczych w wyborach samorządowych celem ułatwienia wyboru kandydata PiS (Ustawa o ustroju miasta stołecznego Warszawy; więcej google: zmiana+granic+okręgów+Sasin) oraz 2) pozbawienie prezydent Łodzi Hanny Zdanowskiej biernego prawa wyborczego (Sasin o Zdanowskiej: Nawet jeśli wygra, nie będzie rządzić; więcej: google: zdanowska+sasin)

Wszystkie te projekty mają jeden wspólny mianownik: 1) dotyczyły wyborów, 2) były na wariata, 3) nie wyszły. OK, wybory 10-05-2020 mogą wyjść, bo się jeszcze nie odbyły. Jest teoretycznie szansa, że panu premierowi odwróci się karta, ale ja powiem już dziś: myślę, że wątpię. Powiem więcej: ten project jest tak na wariata, że cały czas mam przeświadczenie, że to dywersja (zwana także zasłoną dymną). Tj. prawdziwy projekt jeszcze nie został ujawniony.

Przy czym projekt wybory korespondencyjne sam w sobie nie jest zły. Nie jest ani niebezpieczny dla zdrowia (bzdura wymyślona przez opozycję) ani nie jest niekonstytucyjny (kolejna bzdura). W stanie Oregon od 1998 roku wybory są wyłącznie korespondencyjne, tyle że w Oregonie: pakiety są wysyłane trzy tygodnie przed dniem głosowania, a w zasadzie liczenia głosów (co daje możliwość reklamowania się jak się koperty nie dostało), podpisane koperty zwrotne są weryfikowane z podpisem wyborcy z rejestru (coś jak weryfikacja podpisu w banku, co mocno IMO ogranicza możliwość wysyłania głosów za kogoś), komisja potwierdza przyjęcie ważnego głosu (SMSem). Wszystkie wymienione pozwalają moim zdaniem ograniczyć możliwe fałszerstwa i omyłki. Powiem że a la Oregon to ja bym nawet wolał niż łazić do lokalu i głosować osobiście (i pewnie by taniej wyszło). No ale to co wymyślił Sasin to się ma jak pięść do nosa do procedury oregońskiej: jaka jest gwarancja formalna że każdy dostanie kartę do głosowania, jak list ma być dostarczony 3 dni przed i nierejestrowany? Jak wykryć fałszerstwa? Wolne żarty, że się będzie zatrudniać grafologa. Załóżmy, że wpłynie 50 tys skarg na fałszywy podpis pod kartą złożonych nawet złośliwie przez opozycyjnych członków komisji (mają prawo nawet do obstrukcji, podobnie jak PiS co nie miał żadnych podstaw ale składał protesty w ostatnich wyborach samorządowych, bo ,,różnica była mała''). No więc kiedy wtedy SN by uznał ważność wyborów? Za 10 lat? Albo hurtem oddalił wszystkie protesty?

Tak to widzę...

url | Sun, 26/04/2020 06:14 | tagi: ,
Worldometer vs ECDC

Jak już pisałem danych nt COVID19 jest multum bo są traktowane jako treść promocyjna, przyciągająca klikających. Każda tuba medialna (gazeta/portal/telewizja) w szczególności publikuje dane nt.

Źródłem pierwotnym każdego wydają się być raporty narodowe (bo jak inaczej), ale ponieważ te raporty narodowe są składane w różny sposób, to ich połączenie w jedną bazę też różnie może wyglądać. Generalnie ci co takie bazy robią to albo przyznają się, że działają na hmmm niekonwencjonalnych źródłach (Twitter) albo nic nie piszą, skąd mają dane. Mają i już...

Wydaje się (chyba, że czegoś nie wiem), że ECDC, OWiD, CSSE oraz Worldometers (dalej WMs) są najpopularniejszymi źródłami danych nt COVID19 w przekroju międzynarodowym. (Nawiasem mówiąc: WHO nie publikuje danych -- publikuje raporty z danymi w formacie PDF. Wydobycie z nich danych jest nietrywialne i kosztowne, bo nie da się tego na 100% zautomatyzować. W rezultacie prawie nikt nie powołuje się na WHO jako źródło danych -- lekki szejm przyznajmy, bo niby ta organizacja jest od tego żeby m.in. zbierać i udostępniać informację n/t.) Taka drobna różnica na początek: ECDC, OWiD oraz CSSE to prawdziwe bazy: zarejestrowane z dzienną częstotliwością zgony, przypadki, testy i co tam jeszcze. OWiD kopiuje dane z ECDC, kiedyś kopiowało z WHO ale napisali że WHO zawierało liczne błędy i to ich skłoniło do korzystania z ECDC (0:2 dla WHO). WMs publikuje stan na, bazy jako takiej nie ma (przynajmniej publicznie albo nie potrafię jej odszukać na stronie). Można założyć że jak się ogląda stronę WMs z ,,notowaniami'' nt/ koronawirusa w dniu X o godzinie T to jest to stan na X:T. Nawiasem mówiąc tak jest wygodniej, ale jednocześnie komplikuje to sprawę w aspekcie: dzienna liczba przypadków chociażby z uwagi na różnice czasu (jak w PL kończy się dzień to na Fiji jest w połowie inny; inna sprawa, że wątpię żeby ktoś się tym przejmował). Niemniej WMs ma rubrykę "nowe przypadki", tyle że nie bardzo wiadomo co to znaczy...

No więc po tym przydługim wstępie do rzeczy: jak się mają dane z WMs względem ECDC? Jak wspomniałem, na stronie WMs nie ma bazy -- jest tabela z danymi ze stanem ,,na teraz''. ECDC z kolei publikuje bazę w postaci arkusza kalkulacyjnego. Ściągam dane codziennie. Ze strony WMs o 21:00 (koniec dnia, przynajmniej w PL) oraz o 23:00 ze strony ECDC. Dane te wyglądają jakoś tak (WMs, po konwersji HTML→CSV):

date;country;totalC;newC;totalD;newD;totalT
04040600;USA;277467;+306;7402;+10;830095

Stempel czasu jest ustalany w momencie pobrania danych. Na stronie WMs czas nie jest podany explicite (nie ma czegoś takiego jak np. dane aktualizowano o H:M). Czyli 04040600 to dane z 2020/04/04 z godziny 6:00.

Dane ECDC wyglądają jakoś tak:

date;id;country;newc;newd;totalc;totald
2020-04-04;US;United_States_of_America;32425;1104;277965;7157

NewC -- nowe przypadki (dzienne); NewD -- nowe zgodny; totalC -- przypadki łącznie; totalD -- zgony łącznie. Baza ECDC ma stempel czasu (dzień).

W przypadku PL wiem, że Ministerstwo Zdrowia (MinZ) publikuje dane generalnie o godzinie 10-coś-tam oraz o 17/18-coś-tam. (Czemu tak nie wiem). Patrząc na dane z WMs wiedzę, że o 21:00 publikują już dane aktualne na ten dzień, w tym sensie, że uwzględnią stan z ostatniego dziennego komunikatu MinZ (ale jakiego formalnie dnia te dane dotyczą, to już inna sprawa, bo ten dzień przecież się nie skończył :-)). Jeżeli chodzi o ECDC to dane pobrane w dniu X zawierają dane do dnia X-1, żeby było śmieszniej ECDC dla tego dnia przypisuje dane z komunikatu MinZ z dnia X-2. Czyli na przykładzie: arkusz pobrany o 23:00 dnia 24/04/2020 będzie miał ostatni wiersz datowany 23/04 ale dane w tym wierszu będą tymi które pojawiły się na stronie MinZ w dniu 22/04.

Uzbrojony o tę wiedzę dla wybranych 24 krajów wykreśliłem dane (z kwietnia) w wersji WMs oraz ECDC, w dwóch wariantach: z oryginalnymi stemplami czasowymi (górny wiersz) oraz ze stemplem skorygowanym przy założeniu że dane ECDC są 24H opóźnione (czyli dzień 23/04 tak naprawdę to dzień 22/04 itd). Te ,,skorygowane dane'' to dolny wiersz. Dla 90% krajów dane łącznie nakładają się czyli dane są identyczne (są wyjątki--ciekawe czemu). Dane dzienne to misz-masz, każda baza ma własną wersję, nie wiadomo która jest prawdziwa, tyle, że ECDC ma zawsze dane dzienne a WMs niekoniecznie (dla Japonii prawie zawsze ta kolumna była pusta)

Dane i komplet wykresów jest tutaj

Poniżej kilka wybranych krajów:





url | Sun, 26/04/2020 05:17 | tagi: , ,
Wykresy typu Marimekko na przykładzie COVID19

Marimekko to zestawiony do 100% wykres słupkowy, gdzie szerokość słupka jest proporcjonalna do jego udziału w liczebności. (https://predictivesolutions.pl/wykres-marimekko-czyli-analityczny-patchwork)

Nie wiem o co chodzi, ale patrząc na przykłady, to jest to wykres pokazujący strukturę dwóch zmiennych na raz. Coś jak skumulowany wykres słupkowy (stacked barchart), tyle że słupki mają zmienną szerokość, odpowiadającą udziałom/liczebnościom wartości jednej cechy. Dla każdego słupka z kolei poszczególne segmenty mają wysokości proporcjonalne do udziałów/liczebności wartości drugiej cechy (w tym słupku). Alternatywną nazwą jest wykres mozaikowy.

Ale jest też trochę inny wariant takich wykresów, dla przypadku kiedy dla każdej jednostki w populacji generalnej jest Wi = Ci/Ni. Jeżeli wysokość słupka jest proporcjonalna do wartości Wi, szerokość jest proporcjonalna do Ni, to pola są oczywiście w proporcji Ci. Przykładowo jeżeli populacją generalną są kraje świata, wartością cechy Ni jest liczba mieszkańców w kraju i, wartością cechy Ci wielkość emisja CO2 w kraju i, to Wi jest oczywiście emisją per capita.

Moim zdaniem użyteczne, bo pokazuje na raz dwa natężenia: łączne, w skali całej populacji oraz szczegółowe, w skali jednostki. Kontynuując przykład: ile emituje przeciętny mieszkaniec kraju i oraz jaki jest udział emisji kraju i w całości emisji.

W przypadku epidemii COVID19 podstawową zmienną jest liczba zarażonych/zmarłych w kraju i. Ale jeżeli chcemy porównać kraj i z krajem j to oczywiście należy uwzględnić liczbę mieszkańców w obu krajach. Czyli wysokości słupków powinny odpowiadać liczbie zarażonych/zmarłych na jednostkę (np. na 1mln) a szerokości liczbie mieszkańców:

library(ggplot2)
library(dplyr)

dat <- "2020/04/09"

d <- read.csv("indcs.csv", sep = ';',  header=T, na.string="NA");
## liczba ludności w milionach (szerokość):
d$popm <- d$pop / million

## Oblicz współczynniki na 1mln
d$casesr <- d$cases/d$popm
### Wysokość:
d$deathsr <- d$deaths/d$popm

## Ograniczamy liczbę krajów żeby zwiększyć czytelność wykresu
## Tylko kraje wykazujące zmarłych
d <- d %>% filter(deaths > 0) %>% as.data.frame
## Tylko kraje z min 2/1mln i populacji > 1mln
d9 <- d %>% filter(deathsr > 2 & popm > 3 & deaths > 49) %>% droplevels() %>%
 arrange (deathsr) %>% as.data.frame

d9$w <- cumsum(d9$popm)
d9$wm <- d9$w - d9$popm
d9$wt <- with(d9, wm + (w - wm)/2)

d8$w <- cumsum(d8$popm)
d8$wm <- d8$w - d8$popm
d8$wt <- with(d8, wm + (w - wm)/2)

## Dzielimy etykiety na dwie grupy
## (inaczej wiele etykiet zachodzi na siebie)
d9$iso3h <- d9$iso3
d9$iso3l <- d9$iso3
## Kraje o niskich  wartościach bez etykiet
d9$iso3h[ (d9$popm < 15 ) ] <- ""
## Kraje o wysokich  wartościach bez etykiet
d9$iso3l[ (d9$popm >= 15 ) ] <- ""

p9  <- ggplot(d9, aes(ymin = 0)) +
  ylab(label="mratio (deaths/1mln)") +
  xlab(label="population (mln)") +
  ggtitle(sprintf("COVID19 mortality (%s | mratio > 2 | population > 3mln )", dat), 
      subtitle="source: https://www.ecdc.europa.eu/en/covid-19-pandemic (twitter.com/tprzechlewski)") +
  geom_rect(aes(xmin = wm, xmax = w, ymax = deathsr, fill = iso3)) +
  geom_text(aes(x = wt, y = 0, label = iso3h), vjust=+0.5, hjust=+1.25, size=2.0, angle = 90) +
  geom_text(aes(x = wt, y = 0, label = iso3l), vjust=+0.5, hjust=-0.20, size=1.5, angle = 90) +
  theme(legend.position = "none") 
  ## ... podobnie dla zmiennej casesr

Wynik w postaci rysunków:



Powyższe jest dostępne tutaj

url | Mon, 13/04/2020 19:27 | tagi: , , ,
Więcej wykresów nt COVID19

Wymyśliłem sobie wykreślić wykresy pokazujące zależność pomiędzy liczbą zarażonych/zmarłych, a wybranymi wskaźnikami: GDP (zamożność), oczekiwana długość życia (poziom służby zdrowia) oraz śmiertelność dzieci (zamożność/poziom rozwoju). Większość danych pobrałem z portalu OWiD:

Dane dotyczące liczby ludności są z bazy Banku Światowego (https://data.worldbank.org/indicator/sp.pop.totl.) Dane dotyczące zarażonych/zmarłych ze strony ECDC (www.ecdc.europa.eu/en/covid-19/data-collection) Scaliłem wszystko do kupy skryptem Perlowym. NB pojawił się tzw. small problem, bo bazy OWiD oraz WorldBank używają ISO-kodów 3-literowych krajów, a ECDC dwuliterowych (PL vs POL). Trzeba było znaleźć wspólny mianownik. Szczęśliwie Perl ma gotowy moduł. Oprócz tego ECDC stosuje EU-standard w przypadku Grecji (EL zamiast GR) oraz Wielkiej Brytanii (UK/GB).

#!/usr/bin/perl
use Locale::Codes::Country;
...
while (<COVID>) { chomp();
($date, $iso2, $country, $newc, $newd, $totalc, $totald) = split /;/, $_;

   $iso3 = uc ( country_code2code($iso2, 'alpha-2', 'alpha-3'));
}

Rezultat jest zapisywany do pliku o następującej zawartości:

iso3;country;lex2019;gdp2016;cm2017;pop2018;cases;deaths
ABW;Aruba;76.29;NA;NA;105845;77;0
AFG;Afghanistan;64.83;1929;6.79;37172386;423;14
...

Wierszy jest 204, przy czym niektórym krajom brakuje wartości. Ponieważ dotyczy to krajów egzotycznych, zwykle małych, to pominę je (nie teraz później, na etapie przetwarzania R-em). Takich wybrakowanych krajów jest 49 (można grep-em sprawdzić). Jedynym większym w tej grupie jest Syria, ale ona odpada z innych powodów.

Do wizualizacji wykorzystam wykres punktowy (dot-plot) oraz wykresy rozrzutu (dot-plot).

library("dplyr")
library("ggplot2")
library("ggpubr")
## 
options(scipen=1000000)
## https://www.r-bloggers.com/the-notin-operator/
`%notin%` <- Negate(`%in%`)
##
today <- Sys.Date()
tt<- format(today, "%d/%m/%Y")
million <- 1000000
## Lista krajów Europejskich + Izrael
## (pomijamy kraje-liliputy)
ee <- c(
'BEL', 'GRC', 'LTU', 'PRT', 'BGR', 'ESP', 'LUX', 'ROU', 'CZE', 'FRA', 'HUN',
'SVN', 'DNK', 'HRV', 'MLT', 'SVK', 'DEU', 'ITA', 'NLD', 'FIN', 'EST', 'CYP',
'AUT', 'SWE', 'IRL', 'LVA', 'POL', 'ISL', 'NOR', 'LIE', 'CHE', 'MNE', 'MKD',
'ALB', 'SRB', 'TUR', 'BIH', 'BLR', 'MDA', 'UKR', 'ISR', 'RUS', 'GBR' );
ee.ee <- c('POL')

d <- read.csv("indcs.csv", sep = ';',  header=T, na.string="NA");
## Liczba krajów
N1 <- nrow(d)
## liczba ludności w milionach
d$popm <- d$pop / million

## Oblicz współczynniki na 1mln 
d$casesr <- d$cases/d$popm 
d$deathsr <- d$deaths/d$popm 

## Tylko kraje wykazujące zmarłych
d <- d %>% filter(deaths > 0) %>% as.data.frame
## Liczba krajów wykazujących zmarłych
N1d <- nrow(d)

## Tylko kraje z kompletem wskaźników (pomijamy te z brakami)
d <- d[complete.cases(d), ]

nrow(d)

##  UWAGA: pomijamy kraje o wsp. <= 2
##  droplevels() usuwa `nieużywane' czynniki
##  mutate zmienia kolejność na kolejność wg dearhsr:
d9 <- d %>% filter(deathsr > 2 ) %>% droplevels() %>% 
 mutate (iso3 = reorder(iso3, deathsr)) %>% as.data.frame

N1d2 <- nrow(d9)
M1d2 <- median(d9$deathsr, na.rm=T)

## https://stackoverflow.com/questions/11093248/geom-vline-with-character-xintercept
## Wykres punktowy
rys99 <- ggplot(d9, aes(x =iso3, y = deathsr )) +
  geom_point(size=1, colour = 'steelblue', alpha=.5) +
  xlab(label="Country") +
  ylab(label="Deaths/1mln") +
  ggtitle(sprintf("COVID19 mortality in deaths/mln (as of %s)", tt), 
   subtitle=sprintf("Countries with ratio > 0: %i | Countries with ratio > 2.0: N=%i (median %.1f)", 
       N1d, N1d2, M1d2)) +
  theme(axis.text = element_text(size = 4)) +
  ##theme(plot.title = element_text(hjust = 0.5)) +
  scale_y_continuous(breaks=c(0,20,40,60,80,100,120,140,160,180,200,220,240,260,280,300,320,340,360)) +
  geom_hline(yintercept=M1d2, linetype="solid", color = "steelblue") +
  geom_vline(aes(xintercept = which(levels(iso3) == 'POL')), size=1, color="#8A0303", alpha=.25) +
  geom_vline(aes(xintercept = which(levels(iso3) == 'DEU')), size=1, color="#8A0303", alpha=.25) +
  geom_vline(aes(xintercept = which(levels(iso3) == 'SWE')), size=1, color="#8A0303", alpha=.25) +
  coord_flip()

Uwaga: oś OX to skala porządkowa. Czynniki powinny być uporządkowane wg. wartości zmiennej z osi OY, czyli według deathsr. Do tego służy funkcja mutate (iso3 = reorder(iso3, deathsr). Można też uporządkować je ,,w locie'' aes(x =iso3, y = deathsr ), ale wtedy niepoprawnie będą kreślone (za pomocą geom_vline) linie pionowe. Linie pionowe służą do wyróżnienia pewnych krajów. Linia pozioma to linia mediany.

sources <- sprintf ("As of %s\n(Sources: %s %s)", tt,
  "https://www.ecdc.europa.eu/en/covid-19-pandemic",
  "https://ourworldindata.org/")

## Żeby etykiety nie zachodziły na siebie tylko dla wybranych krajów
## Add empty factor level! Istotne inaczej będzie błąd
# https://rpubs.com/Mentors_Ubiqum/Add_Levels
d$iso3 <- factor(d$iso3, levels = c(levels(d$iso3), ""))

d$iso3xgdp <- d$iso3
d$iso3xlex <- d$iso3
d$iso3xcm <- d$iso3

## Kraje o niskich  wartościach bez etykiet
## Bez etykiet jeżeli GDP<=45 tys oraz wskaźnik < 50:
d$iso3xgdp[ (d$gdp2016 < 45000) & (d$deathsr < 50 ) ] <- ""
## Inne podobnie
d$iso3xlex[ ( (d$lex2019 < 80) | (d$deathsr < 50 ) ) ] <- ""
d$iso3xcm[ ((d$cm2017 > 1.2) | (d$deathsr < 50 ) ) ] <- ""

## GDP vs współczynnik zgonów/1mln
rys1 <- ggplot(d, aes(x=gdp2016, y=deathsr)) + 
  geom_point() +
  geom_text(data=d, aes(label=sprintf("%s", iso3xgdp), x=gdp2016, y= deathsr), vjust=-0.9, size=2 ) +
  xlab("GDP (USD, Constant prices)") + 
  ylab("deaths/1mln") + 
  geom_smooth(method="loess", se=F, size=2) +
  ggtitle("GDP2016CP vs COVID19 mortality", subtitle=sources)

## Life ex vs współczynnik zgonów/1mln
rys2 <- ggplot(d, aes(x=lex2019, y=deathsr)) + 
  geom_point() +
  geom_text(data=d, aes(label=sprintf("%s", iso3xlex), x=lex2019, y= deathsr), vjust=-0.9, size=2 ) +
  xlab("Life expentancy") + 
  ylab("deaths/1mln") + 
  geom_smooth(method="loess", se=F, size=2) +
  ggtitle("Life expentancy vs COVID19 mortality", subtitle=sources)

## Child mortality vs współczynnik zgonów/1mln
rys3 <- ggplot(d, aes(x=cm2017, y=deathsr)) + 
  geom_point() +
  geom_text(data=d, aes(label=sprintf("%s", iso3xcm), x=cm2017, y= deathsr), vjust=-0.9, size=2 ) +
  xlab("Child mortality %") +
  ylab("deaths/1mln") + 
  geom_smooth(method="loess", se=F, size=2) +
  ggtitle("Child mortality vs COVID19 mortality", subtitle=sources)

## GDP vs Child mortality 
rys0 <- ggplot(d, aes(x=gdp2016, y=cm2017)) + 
  geom_point() +
  xlab("GDP (USD, Constant prices)") + 
  ylab("Child mortality") +
  geom_smooth(method="loess", se=F, size=2) +
  ggtitle("GDP2016CP vs Child mortality", subtitle=sources)

Jeszcze raz dla krajów Europejskich:

## Tylko kraje Europejskie:
d <- d %>% filter (iso3 %in% ee) %>% as.data.frame

d$iso3xgdp <- d$gdp2016
d$iso3xlex <- d$lex2019
d$iso3xcm <- d$cm2017
d$iso3xgdp[ d$iso3 %notin% ee.ee ] <- NA
d$iso3xlex[ d$iso3 %notin% ee.ee ] <- NA
d$iso3xcm[ d$iso3 %notin% ee.ee ] <- NA

rys1ec <- ggplot(d, aes(x=gdp2016, y=casesr)) + 
  geom_point() +
  geom_text(data=d, aes(label=sprintf("%s", iso3), x=gdp2016, y= casesr), vjust=-0.9, size=2 ) +
  geom_point(data=d, aes(x=iso3xgdp, y= casesr), size=2, color="red" ) +
  xlab("GDP (USD, Constant prices") + 
  ylab("cases/1mln") +
  geom_smooth(method="loess", se=F, size=2) +
  ggtitle("GDP2016CP vs COVID19 cases (Europe)", subtitle=sources)
  ... itd...

Wynik w postaci rysunków:




Powyższe jest dostępne tutaj

url | Mon, 13/04/2020 05:12 | tagi: , ,
Źródła danych nt #Covid19 podsumowanie (wersja 04/2020)

Danych nt COVID19 jest multum bo są traktowane jako treść promocyjna, przyciągająca klikających. Każda tuba medialna (gazeta/portal/telewizja) w szczególności publikuje dane nt

Niestety z faktu, że danych nt COVID19 jest multum niewiele wynika, bo wszystkie są do dupy, w sensie że są wątpliwej jakości, tj. zwykle sposób w jaki są gromadzone nie jest opisany. Nie wiadomo kto jest klasyfikowany jako zarażony COVID19, nie wiadomo kto jest klasyfikowany jako zmarły w wyniku zarażenia COVID19. Można się domyślać że klasyfikowany jako zarażony COVID19 jest ten komu wykonany słynny test (w większości wypadków, podobno nie zawsze); zmarły w wyniku zarażenia COVID19 jest ten, któremu lekarz wypisał świadectwo zgonu ze stosownym wpisem.

Powyższe skutkuje: niemożnością oceny prawdziwej skali zjawiska (stąd teorie że rząd fałszuje) oraz niemożnością dokonania wiarygodnych porównań międzynarodowych.

Jeżeli chodzi o Polskę, to nikt nie prowadzi publicznego rejestru. Strona GIS to w ogóle kuriozalnie wygląda. Są komunikaty, jak ktoś ma czas to może jest sobie z nich dane wydłubywać i agregować. Na poziomie międzynarodowym są 2 źródła agregacji pierwotnej nazwijmy to: WHO oraz ECDC. Te dwa źródła agregują dane nadsyłane przez ciała krajowe, wg jakiejś niezdefiniowanej (przypuszczalnie ad hoc ustalanej) procedury. Inni korzystają z danych WHO/ECDC pośrednio lub bezpośrednio ewentualnie uzupełniając/modyfikując je w bliżej niezdefiniowany sposób. No i są jeszcze źródła specyficzne takie jak Google Community Mobility Reports.

WHO Situation Reports. To nie jest baza danych, ale pliki PDF zawierające raporty w tym dane. Pozyskanie z nich danych wymaga nietrywialnej konwersji. www.who.int/emergencies/diseases/novel-coronavirus-2019/situation-reports . Dane z raportów dostępne są m.in. na stronie Wikipedii: en.wikipedia.org/wiki/2019%E2%80%9320_coronavirus_pandemic_cases/WHO_situation_reports oraz en.wikipedia.org/wiki/Talk:2019%E2%80%9320_coronavirus_pandemic_cases/WHO_situation_reports

ECDC.europa.eu Dane udostępniane w postacji codziennie aktualizowanego arkusza kalkulacyjnego. www.ecdc.europa.eu/en/covid-19/data-collection [Since the beginning of the coronavirus pandemic, ECDC's Epidemic Intelligence team has been collecting the number of COVID-19 cases and deaths, based on reports from health authorities worldwide.]

John Hopkins Univ/CSSE github.com/CSSEGISandData/COVID-19 [To identify new cases, we monitor various twitter feeds, online news services, and direct communication sent through the dashboard. Before manually updating the dashboard, we confirm the case numbers using regional and local health departments, namely the China CDC (CCDC), Hong Kong Department of Health, Macau Government, Taiwan CDC, European CDC (ECDC), the World Health Organization (WHO), as well as city and state level health authorities.]

Worldometers https://worldometers.info/coronavirus/ [nie wiadomo jak zbierane, przypuszczalnie kopiowane z WHO/ECDC; Worldometers, to -- wydaje się -- inicjatywa PR-owa firmy produkującej oprogramowanie]

OWiD czyli Our World in Data wykorzystuje bazę ECDC. ourworldindata.org/coronavirus-source-data [na podstawie ECDC]

Reasumując: jak ktoś potrzebuje gotowego zbioru danych, to ma do wyboru ECDC/OWiD/CSSE. Wszystkie są wątpliwe, ale lepszych nie ma a ci przynajmniej podają (ogólnikowo to fakt) jak te dane zbierają. Jak ktoś używa worldometers to pytanie czemu to robi... Jak posługuje się jeszcze innymi bardziej egoztycznymi danymi to szkoda tracić czasu na jego analizy (ew. sprawdzić czy nie są to dane ECDC/OWiD/CSSE tylko pod inną marką sprzedawane).

W Polsce nie ma oficjalnego rejestru. Przynajmniej ja nic nie wiem na temat. To tak nawiasem mówiąc szejm. Że żaden urząd, uniwersytet czy instytut nie udostępnia oficjalnych/wiarygodnych/kompletnych/łatwo dostępnych danych (w Niemczech na przykład robi to słynny RKI; a we Francji nie mniej słynny pasteur.fr). W PL zaś każdy się stara i coś tam udostępnia, z naciskiem na coś... Znalazłem rejestr nieopisany (w sensie jak/skąd są nim gromadzone dane) prowadzony przez dziennik z grupy PolskaPress. dziennikzachodni.carto.com/tables/zachorowania_na_koronawirusa_w_polsce_marzec/public

Google Community Mobility Reports To nie jest baza danych, ale zbiór raportów w formacie PDF. www.google.com/covid19/mobility/. [Google has launched a new website that uses anonymous location data collected from users of Google products and services to show the level of social distancing taking place in various locations. The COVID-19 Community Mobility Reports web site will show population data trends of six categories: Retail and recreation, grocery and pharmacy, parks, transit stations, workplaces, and residential. The data will track changes over the course of several weeks, and as recent as 48-to-72 hours prior, and will initially cover 131 countries as well as individual counties within certain states.] Ciekawostka raczej, bo w szczególności, nie do końca wiadomo co te procenty Gógla oznaczają, np. -60% względem baseline. Anie nie wiadomo co to jest ten baseline (średnia?) ani jak liczony jest ruch...

Nie mniej wydłubałem te procenty z raportów dla krajów OECD i zamieniłem na plik w formacie CSV. Jest on do pobrania tutaj.

Dane dotyczące USA. Oczywiście są częścią WHO/ECDC/CSSE. Ale są także bardziej szczegółowe:

CDC [The provisional counts for coronavirus disease (COVID-19) deaths are based on a current flow of mortality data in the National Vital Statistics System.] https://www.cdc.gov/nchs/nvss/vsrr/COVID19/index.htm

NewYork Times [The data is the product of dozens of journalists working across several time zones to monitor news conferences, analyze data releases and seek clarification from public officials on how they categorize cases.] https://github.com/nytimes/covid-19-data oraz https://www.nytimes.com/interactive/2020/us/coronavirus-us-cases.html

No i jeszcze są pewnie jakieś chińskie dane, ale to trzeba znać chiński.

url | Sat, 04/04/2020 04:40 | tagi: , ,
Korespondencyjne wybory w Bawarii


Przez przypadek ciekawe odkrycie. W niedzielę zakończyły się wybory w Bawarii, wyłącznie w trybie korespondencyjnym z uwagi na epidemię #COVID19. Jednocześnie w PL trwa wałkowanie tematu pn przesunąć wybory prezydenckie. Niewątpliwie przykład niemiecki to kłopot, że tak powiem narracyjny, dla tych co chcą przesunięcia.

No więc naiwnie wpisałem w google: bavaria+second+round+elections+postal a w rezultacie dostałem głównie strony o apelu kandydatki Kidawy o przesunięcie wyborów w tym kuriozalna relacja Reutersa -- kiedyś szanowanej agencja informacyjnej, teraz kandyjskiej dezinformacyjnej prop-tuby. W dziale "Zdrowie" -- a jakże -- donosi ona o apelu o bojkot p. Kidawy kończąc ten "zdrowotny raport" raportem pana J. Flisa z Krakowa (tak to ten sam, udający naukowca, telewizyjny-profesor Flis), ale na temat wyborów w Bawarii, które skutkowały wg. p. Flisa 2 tys ofiar (metody wyliczeń, którą posłużył się "profesor" nie podano). Zaistne niezwykle relewantny dokument do mojego zapytania.

url | Thu, 02/04/2020 04:46 | tagi: , , ,
Dane Eurostatu nt zgonów/urodzeń

Trzeba coś robić w czasie kwarantanny

## https://b-rodrigues.github.io/modern_R/
## https://gist.github.com/imartinezl/2dc230f33604d5fb729fa139535cd0b3
library("eurostat")
library("dplyr")
library("ggplot2")
library("ggpubr")
## 
options(scipen=1000000)
dformat <- "%Y-%m-%d"

eu28 <- c("AT", "BE", "BG", "HR", "CY", "CZ", "DK",
   "EE", "FI", "FR", "DE", "EL", "HU", "IE", 
   "IT", "LT", "LU", "LV", "MT", "NL", "PL", 
   "PT", "RO", "SK", "SI", "ES", "SE")
eu6 <- c("DE", "FR", "IT", "ES", "PL")

### Demo_mor/ Mortality monthly ### ### ###
dm <- get_eurostat(id="demo_mmonth", time_format = "num");
dm$date <- sprintf ("%s-%s-01", dm$time, substr(dm$month, 2, 3))
str(dm)

## There are 12 moths + TOTAL + UNKN
dm_month <- levels(dm$month)
dm_month

## Only new data
dm28  <- dm %>% filter (geo %in% eu28 & as.Date(date) > "1999-12-31")
str(dm28)
levels(dm28$geo) 

## Limit to DE/FR/IT/ES/PL:
dm6  <- dm28 %>% filter (geo %in% eu6)
str(dm6)
levels(dm6$geo) 

pd1 <- ggplot(dm6, aes(x= as.Date(date, format="%Y-%m-%d"), y=values)) + 
 geom_line(aes(group = geo, color = geo), size=.4) +
 xlab(label="") +
 ##scale_x_date(date_breaks = "3 months", date_labels = "%y%m") +
 scale_x_date(date_breaks = "6 months",
   date_labels = "%m\n%y", position="bottom") +
 theme(plot.subtitle=element_text(size=8, hjust=0, color="black")) +
 ggtitle("Deaths", subtitle="https://ec.europa.eu/eurostat/data/database (demo_mmonth)")

## Newer data
dm6  <- dm6 %>% filter (as.Date(date) > "2009-12-31")

pd2 <- ggplot(dm6, aes(x= as.Date(date, format="%Y-%m-%d"), y=values)) + 
 geom_line(aes(group = geo, color = geo), size=.4) +
 xlab(label="") +
 scale_x_date(date_breaks = "3 months", date_labels = "%m\n%y", position="bottom") +
 theme(plot.subtitle=element_text(size=8, hjust=0, color="black")) +
 ggtitle("Deaths", subtitle="https://ec.europa.eu/eurostat/data/database (demo_mmonth)")

ggsave(plot=pd1, file="mort_eu_L.png", width=12)
ggsave(plot=pd2, file="mort_eu_S.png", width=12)
## Live births (demo_fmonth) ### ### ###

dm <- get_eurostat(id="demo_fmonth", time_format = "num");
dm$date <- sprintf ("%s-%s-01", dm$time, substr(dm$month, 2, 3))
str(dm)

## There are 12 moths + TOTAL + UNKN
dm_month <- levels(dm$month)
dm_month

dm28  <- dm %>% filter (geo %in% eu28 & as.Date(date) > "1999-12-31")
str(dm28)
levels(dm28$geo) 

dm6  <- dm28 %>% filter (geo %in% eu6)
str(dm6)
levels(dm6$geo) 

pd1 <- ggplot(dm6, aes(x= as.Date(date, format="%Y-%m-%d"), y=values)) + 
 geom_line(aes(group = geo, color = geo), size=.4) +
 xlab(label="") +
 ##scale_x_date(date_breaks = "3 months", date_labels = "%y%m") +
 scale_x_date(date_breaks = "6 months", date_labels = "%m\n%y", position="bottom") +
 theme(plot.subtitle=element_text(size=8, hjust=0, color="black")) +
 ggtitle("Births", subtitle="https://ec.europa.eu/eurostat/data/database (demo_fmonth)")

##
dm6  <- dm6 %>% filter (as.Date(date) > "2009-12-31")

pd2 <- ggplot(dm6, aes(x= as.Date(date, format="%Y-%m-%d"), y=values)) + 
 geom_line(aes(group = geo, color = geo), size=.4) +
 xlab(label="") +
 scale_x_date(date_breaks = "3 months", date_labels = "%m\n%y", position="bottom") +
 theme(plot.subtitle=element_text(size=8, hjust=0, color="black")) +
 ggtitle("Births", subtitle="https://ec.europa.eu/eurostat/data/database (demo_fmonth)")

ggsave(plot=pd1, file="birt_eu_L.png", width=12)
ggsave(plot=pd2, file="birt_eu_S.png", width=12)
## Population (only) yearly ### ### ##
## Population change - Demographic balance and crude rates at national level (demo_gind)
dp <- get_eurostat(id="demo_gind", time_format = "num");
dp$date <- sprintf ("%s-01-01", dp$time)
str(dp)
dp_indic_dic <-  get_eurostat_dic("indic_de")

dp_indic_dic
dp28  <- dp %>% filter (geo %in% eu28 & time > 1999 & indic_de == "JAN")

str(dp28)
dp6  <- dp28 %>% filter (geo %in% eu6)

pdp1 <- ggplot(dp6, aes(x= as.Date(date, format="%Y-%m-%d"), y=values)) + 
        geom_line(aes(group = geo, color = geo), size=.4) +
        xlab(label="") +
        ##scale_x_date(date_breaks = "3 months", date_labels = "%y%m") +
        ##scale_x_date(date_breaks = "6 months", date_labels = "%m\n%y", position="bottom") +
        theme(plot.subtitle=element_text(size=8, hjust=0, color="black")) +
        ggtitle("Population", subtitle="https://ec.europa.eu/eurostat/data/database (demo_fmonth)")

ggsave(plot=pdp1, file="pdp1", width=12)

url | Wed, 25/03/2020 08:51 | tagi: , , ,
Dzienne dane dot. wypadków drogowych w Polsce

Na stronie http://policja.pl/pol/form/1,Informacja-dzienna.html udostępniane są dzienne dane dotyczące liczby interwencji, zatrzymanych na gorącym uczynku, zatrzymanych poszukiwanych, pijanych kierujących, wypadków, zabitych w wypadkach, rannych w wypadkach.

Ściągam wszystkie dane:

#!/bin/bash

rm pp.html

for ((i=0; i <= 274; i++)) do 
  if [ ! -f ${i}.html ] ; then
    curl -o ${i}.html "http://policja.pl/pol/form/1,Informacja-dzienna.html?page=${i}" ; 
    grep 'data-label' ${i}.html >> pp.html
    sleep 6
  else 
    grep 'data-label' ${i}.html >> pp.html
    echo done
  fi

done

zamieniam prostymi skryptami na plik CSV, który ma następującą strukturę:

data;interwencje;zng;zp;znk;wypadki;zabici;ranni
2008-12-01;NA;873;344;447;135;1;1

okazuje się że liczba interwencji jest podawana od roku 2018, wcześniej nie była. Nic to wstawiamy NA.

Na przyszłość dane będą aktualizowane w ten sposób, że codziennie (przez odpowiedni wpis w pliku crontab) będzie pobierany plik http://policja.pl/pol/form/1,Informacja-dzienna.html:

#!/usr/bin/perl
use LWP::Simple;

$PP="http://policja.pl/pol/form/1,Informacja-dzienna.html";
$PPBase="pp.csv";

$content = get("$PP");

$content =~ s/\r//g; # dla pewności usuń

@content = split (/\n/, $content);

foreach (@content) { chomp();
  unless ($_ =~ m/data-label=/ ) { next }

  if ($_ =~ m/Data statystyki/ ) { $d = clean($_); }
  elsif ($_ =~ m/Interwencje/ )  { $i = clean($_); }
  elsif ($_ =~ m/Zatrzymani na g/ ) { $zg = clean($_); }
  elsif ($_ =~ m/Zatrzymani p/ ) { $zp = clean($_); }
  elsif ($_ =~ m/Zatrzymani n/ ) { $zn = clean($_); }
  elsif ($_ =~ m/Wypadki d/ ) { $w = clean($_);  }
  elsif ($_ =~ m/Zabici/ )  { $z = clean($_);  }
  elsif ($_ =~ m/Ranni/ ) { $r = clean($_);
    $l = "$d;$i;$zg;$zp;$zn;$w;$z;$r";
    $last_line = "$l"; $last_date = "$d";
    ## pierwszy wpis powinien zawierać dane dotyczące kolejnego dnia
    ## więc po pobraniu pierwszego można zakończyć
    last;
 }
}

### read the database
open (PP, "<$PPBase") || die "cannot open $PPBase/r!\n" ;

while (<PP>) { chomp(); $line = $_; @tmp = split /;/, $line; }

close(PP);

### append the database (if new record)
open (PP, ">>$PPBase") || die "cannot open $PPBase/w!\n" ;

unless ("$tmp[0]" eq "$last_date") { print PP "$last_line\n" }
else {print STDERR "nic nowego nie widzę!\n"}

close(PP);

sub clean  {
 my $s = shift;
 $s =~ s/<[^<>]*>//g;
 $s =~ s/[ \t]//g;

 return ($s);
}

Zaktualizowana baza jest wysyłana na githuba. Tutaj jest: https://github.com/hrpunio/Nafisa/tree/master/PP

Agregacja do danych tygodniowych okazała się nietrywialna

Niektóra lata zaczynają się od tygodnia numer 0 a inne od 1. Okazuje się, że tak ma być (https://en.wikipedia.org/wiki/ISO_week_date#First_week):

If 1 January is on a Monday, Tuesday, Wednesday or Thursday, it is in W01. If it is on a Friday, it is part of W53 of the previous year. If it is on a Saturday, it is part of the last week of the previous year which is numbered W52 in a common year and W53 in a leap year. If it is on a Sunday, it is part of W52 of the previous year.

Nie bawię się w subtelności tylko tygodnie o numerze zero dodaję do tygodnia z poprzedniego roku.

Sprawdzam czy jest OK i się okazuje że niektóre tygodnie mają 8 dni. W plikach html są błędy:

Błędne daty 2019-10-30 winno być 2019-09-30; podobnie błędne 2019-03-28 (winno być 2019-02-28), 2018-11-01 (2018-12-01), 2018-12-01 (2017-12-01), 2016-04-30 (2016-03-30), 2009-08-31 (2009-07-31). Powtórzone daty: 2016-03-10, 2010-07-25, 2010-01-10 (zdublowane/różne/arbitralnie usuwamy drugi) Ponadto brak danych z następujących dni: 2015-12-04--2015-12-07, 2015-04-17--2015-04-20, 2014-10-02--2014-10-05, 2014-01-23 i jeszcze paru innych (nie chcialo mi się poprawiać starych.)

Teraz jest OK, plik ppw.csv ma nast strukturę:

rok;nrt;interwencje;in;zng;zngn;zp;zpn;znk;znkn;wypadki;wn;zabici;zn;ranni;rn;d1;d7 coś co się kończy na `n' to liczba tego co jest w kolumnie poprzedniej, np zn to liczba dni tygodnia dla kolumny zabici. Generalnie kolumny kończące się na `n' zawierają 7 :-) Kolumna d1 to pierwszy dzień tygodnia a kolumna d7 ostatni.

maxY <- max (d$zabici)
pz <- ggplot(d, aes(x= as.factor(nrt), y=zabici )) + 
 geom_bar(fill="steelblue", stat="identity")  +
 xlab(label="") +
 ggtitle("Wypadki/zabici (Polska/2020)", subtitle="policja.pl/pol/form/1,Informacja-dzienna.html") 

W sumie agregacja jest niepotrzebna, bo można ją zrobić na poziomie R używając funkcji stat_summary:

pw <- ggplot(d, aes(x= week, y=wypadki)) + 
 stat_summary(fun.y = sum, geom="bar", fill="steelblue") +
 scale_x_date( labels = date_format("%y/%m"), breaks = "2 months") +
 xlab(label="") +
 #theme(plot.subtitle=element_text(size=8, hjust=0, color="black")) +
 ggtitle("Wypadki (Polska/2018--2020)", subtitle="policja.pl/pol/form/1,Informacja-dzienna.html") 

albo najpierw agregując dane a potem wykreślając wykres szeregu zagregowanego. Drugi sposób pozwala na przykład na dodanie linii oznaczających poziomy zagregowanego zjawiska/etykiety słupków w sposób `inteligentny'. Dodajemy etykiety (z numerem tygodnia) tylko dla słupków poniżej/powyżej Q1/Q3:

## agregowanie do danych tygodniowych kolumn ranni, zabici, wypadki
dw <- d %>% group_by ( YrWeek) %>% summarise_at ( vars(ranni,zabici,wypadki), sum )

## Obliczanie mediany i kwartyli
median.zw <- median(dw$zabici)
q1.zw <- quantile(dw$zabici, 1/4) 
q3.zw <- quantile(dw$zabici, 3/4) 

## YrWeekZZ to numer tygodnia, dla tygodni w których liczba wypadków jest typowa
## numer jest pusty (żeby nie był drukowany); taki trick może jest lepszy
dw$YrWeekZZ <- substr(dw$YrWeek,4,5)
dw$YrWeekZZ[ (dw$zabici > q1.zw) & (dw$zabici < q3.zw) ] <- ""

pz.2 <- ggplot(dw, aes(x= YrWeek, y=zabici)) + 
 geom_bar(stat="identity", fill = "steelblue") +
 geom_text(data=dw, aes(label=sprintf("%s", YrWeekZZ), x=YrWeek, y= zabici), vjust=-0.9, size=3 ) +
 geom_hline(yintercept=median.zw, linetype="solid", color = "violet", size=.4) +
 geom_hline(yintercept=q3.zw, linetype="solid", color = "red", size=.4) +
 geom_hline(yintercept=q1.zw, linetype="solid", color = "red", size=.4) +
 xlab(label="rok/tydzień") +
 ylab(label="zabici") +
 scale_x_discrete(breaks=c("18/01", "18/10", "18/20",  "18/30", "18/40",
          "19/01", "19/10", "19/20",  "19/30", "19/40", "20/01", "20/10"))  +
          #  labels = c("/18/01", "18/10", "18/20", "")) ## tutaj niepotrzebne
 ggtitle("Wypadki/zabici (Polska/2018--2020)", 
  subtitle="Linie poziomie: q1/me/q3 (źródło: policja.pl/pol/form/1,Informacja-dzienna.html)") 

url | Wed, 25/03/2020 07:29 | tagi: , ,
Dane nt #Covid19 podsumowanie

Dane pierwotne: Center for Systems Science and Engineering (CSSE/Johns Hopkins University) https://github.com/CSSEGISandData/COVID-19 (także słynna wizualizacja: https://gisanddata.maps.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6.) European Centre for Disease Prevention and Control https://ecdc.europa.eu/en/geographical-distribution-2019-ncov-cases.

Dane agregowane od innych: Our World in Data/Coronavirus Source Data/WHO Situation Reports https://ourworldindata.org/coronavirus-source-data . Są też tzw. dane w czasie rzeczywistym: https://worldometers.info/coronavirus/, ale ich wiarygodność jest podejrzana, bo w przeciwieństwie do tych wyżej opisanych nie wiadomo jak są zbierane i/lub skąd agregowane (więc nie ma klikalnego linku).

url | Tue, 17/03/2020 05:12 | tagi: , ,
Pierwszy skazany w sprawie zabójstwa Adamowicza

Zaproszenie na własny pogrzeb?

Dariusz S., pracownik Agencji Ochrony Tajfun, która 13 stycznia 2019 r. zabezpieczała imprezę Wielkiej Orkiestry Świątecznej Pomocy, tuż po zdarzeniu zeznał, że nożownik, który zaatakował Adamowicza, wszedł na scenę posługując się plakietką z napisem `Media'.

`Oskarżony był pod wpływem bardzo silnych emocji, to nie było zaplanowane' -- uznał w piątek Sąd Rejonowy w Gdańsku, skazując 37-letniego mężczyznę na karę roku więzienia w zawieszeniu na trzy lata. Wymierzył mu też 7,5 tys. złotych grzywny oraz obciążył kosztami procesu w kwocie ponad 32 tys. zł. Wyrok nie jest prawomocny.

Sąd zwrócił uwagę, że u wszystkich, którzy widzieli tragiczne wydarzenie z 13 stycznia 2019 r. `rodziło się pytanie, jak to się stało, że sprawca zabójstwa prezydenta Gdańska po prostu wkroczył sobie na scenę, dokonał tego czynu, po czym jeszcze przechwycił mikron i wygłosił swoje oświadczenie'.

[TVPInfo 21.02.2020, 09:52 |aktualizacja: 10:34]

Koncert 27. Finału Wielkiej Orkiestry Świątecznej Pomocy na Targu Węglowym w Gdańsku rozpoczął się w niedzielę o godz. 15. `Światełko do nieba' zaplanowano jak w całej Polsce na godz. 20.

Organizatorzy -- stowarzyszenie Regionalne Centrum Wolontariatu w Gdańsku -- zgłosili, że w koncercie weźmie udział 5 tys. osób. Taka impreza, jak każda powyżej tysiąca osób, mogłaby zostać zarejestrowana jako masowa. Finał WOŚP zgłoszono jednak jako zajęcie pasa drogowego. Na podstawie takich przepisów organizowano ją w Gdańsku od początku, tak jak wiele innych wydarzeń sportowych czy kulturalnych. Tym razem też uzyskała zgodę magistratu [czyli zamordowanego -- moje] i komendanta wojewódzkiego policji.

Regionalne Centrum Wolontariatu wynajęło w tym celu Agencję Ochrony `Tajfun' z Gdańska. Jak zapewniają organizatorzy, miała ona potraktować wydarzenie tak jak imprezę masową.

Agencja Tajfun działa od 2008 roku. Ma licencję. Na Targu Węglowym pracowało w niedzielę 50 ochroniarzy.

-- Pod względem formalnym i praktycznym w naszej ocenie wszystko zostało dochowane -- mówił w poniedziałek na konferencji prasowej Łukasz Isenko, pełnomocnik firmy.

[https://trojmiasto.wyborcza.pl/; Anna Dobiegała, współpraca Aleksandra Brzezińska 16 stycznia 2019 | 05:02]

[Ten S. to nie jest szeregowy ochroniarz tylko nieformalny szef firmy zresztą -- moje]: Tajfun działa od 2008 roku. Posiada licencję wystawioną na nazwisko Gracjana Zwolaka, ale w portalach społecznościowych jako dyrektor zarządzający występuje Dariusz Sokołowski. To były policjant, kurator sądowy, a także właściciel firmy windykacyjnej. Tajfunem zarządzać ma od półtora roku. [WirtualnaPolska]

Dariusz S. to były policjant. Pracował m.in. w Komendzie Miejskiej w Gdańsku. Jak ustalił portal tvn24.pl, odszedł ze służby ze względu na bójkę, do której doszło w Gdańsku 29 lipca 2016 roku. Akt oskarżenia trafił do sądu w sierpniu 2017 r., ale proces jeszcze się nie rozpoczął. Z nieoficjalnych informacji portalu wynika, że Dariusza S. zawieszono w obowiązkach policjanta, gdy usłyszał zarzuty.

[WirtualnaPolska 21.01.2019, Dariusz S., który ochraniał tragiczny finał WOŚP, był oskarżony o pobicie i groźby. Musiał odejść z policji]

Teraz dostał wyrok w zawieszeniu, bo miał zdaniem sądu: poświadczony dokumentami wzorowy przebieg służby w policji.

To chyba wszystko.

url | Mon, 24/02/2020 21:35 | tagi: , , ,
Wycieczka do Paryża

Katharina von Gail

vanGogh (autoportret)

Soldats français en marche

Lądowanie w piątek na lotnisku w Beauvais, za 13 EUR (od osoby) jedziemy mikrobusem na stację metra Porte Maillot. Tu kupujemy bilety (i takie ciastko co wygląda jak sernik, ale jest z przesłodzonego budyniu) i jedziemy zwiedzać Luwr. Około 21 jedziemy (także metrem) na kwaterę wynajętą przez AirBnB w 13 dzielnicy. Od stacji Olympiades nasza kwatera jest może 300 m. W Luwrze to najbardziej mi się podobają eksponaty z bliskiego i środkowego wschodu (Syria/Iran/Irak) oraz (bo lubię) kolekcja malarstwa holenderskiego (Breugel itp.)

Rano pobudka i około 9:00 idziemy zwiedzać miasto rozpoczynając od Notre Dame, które jest oczywiście po pożarze zamknięte. Oglądamy to co widać zza parkanu. W centrum koncentracja policji w pełnym rynsztunku bojowy, ale się nie biją. Chodzimy, oglądamy około 15:00 idziemy do muzeum Orsay oglądać francuski symbolizm. Oglądamy do 18:00 czyli do zamknięcia. Potem na kwaterę. Odkrywamy, że w pobliżu naszego bloku jest m.in supermarket, piekarnia i chińska restauracja. Decydujemy się na kolację w tej restauracji wydając prawie 40 EUR.

Game day czyli niedziela. Rozpoczynamy od oglądania Sorbony (nic ciekawego), potem idziemy pod Panteon. Wejście płatne więc my nie wchodzimy, ale Janek ma za darmo jako osobnik małoletni (26 lat). Czekamy na niego w kościele St Etienne du Mont załapując się na mszę. Msza jest na wysokim poziomie (w sensie formy--organista wirtuoz, śpiew pod kierunkiem zawodowej śpiewaczki ewidentnie itp). Kościół pełny i sporo młodych ludzi, w większości białych. Po mszy idziemy na naleśnika, zwiedzamy coś tam jeszcze i jedziemy metrem do Saint Denis.

Metro pełne ludzi. Jadą na mecz rugby Francja-Włochy. Wysiadamy, idziemy z kibicami oglądać stadion. Potem pod Bazylikę, bo to blisko. Wejście do kościoła jest za darmo, ale do krypty z Karolem Młotem już nie (10 EUR). Przed Bazyliką karuzela. Hmmm coś jakby ktoś na Wawelu przed kryptą królów postawił wesołe miasteczko. Zresztą następnego dnia nasz Francuz z kwatery pyta gdzie byliśmy. -- W Saint Denis, -- Na meczu? -- Nie oglądać stadion i katedrę -- Jaką katedrę?

Ostatni dzień: Pola Elizejskie, Łuk Triumfalny, Pałac Macrona, plac Trocadero (jeszcze jeden naleśnik, tym razem nie na talerzu, ale z foodtrucka), Wieża Eiffla, pałac Inwalidów (ale tylko z zewnątrz; zwłoki Napoleona sobie darowaliśmy a na muzeum Armii nie było czasu). Coś tam jeszcze zwiedzamy i jedziemy na stację metra Porte Maillot na 17:00. Zresztą od 16:00 już pada. Dwie godziny jedziemy na lotnisko, bo są korki, ale samolot do GDA też się spóźnił. Odlatujemy z Paryża o 9:00 wieczorem z 30 minutowym opóźnieniem.

Podsumowanie: Z muzeów to zwiedziliśmy Luwr i Orsay. Obejrzeliśmy z 10 kościołów w tym Bazylikę Saint Denis i stadion. Paryż zrobił na mnie nadspodziewanie dobre wrażenie. Sprawne metro, ciekawe muzea, w których zbiory są przyjaźnie wyeksponowane dla zwiedzających, że tak powiem: żadnych szyb czy barierek (za wyjątkiem kilku już naprawdę unikatowych eksponatów takich jak Mona Lisa. można podjeść i palec wsadzić w płótno vanGogha czy Breugla). Nie ma wałęsających się uchodźców jak w Mediolanie a wszyscy bezdomi jakich widzieliśmy to biali. Dużo policji/wojska z bronią maszynową ma ulicach.


Od lewej: pałac Dariusza w Luwrze/regaty w Molesey/kibice Włoscy/St. Denis (grobowce i katedra)

Koszt (3 osoby): 900 PLN kwatera, luwr+orsay 230+125 PLN, metro 200 PLN, przejazd z/do Paryża 300 PLN, bilety lotnicze 800. Razem wychodzi jakieś 2500 PLN. Do tego jeszcze kilkaset złotych na jedzenie. W 3 kaflach się zmieściliśmy myślę...

Do pobrania ślady kml ze zdjęciami; album ze zdjęciami.

url | Mon, 17/02/2020 05:36 | tagi: , , ,