<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>R on Łukasz Prokulski, Dane i Analizy</title><link>https://blog.prokulski.science/tags/r/</link><description>Recent content in R on Łukasz Prokulski, Dane i Analizy</description><generator>Hugo</generator><language>pl-PL</language><lastBuildDate>Mon, 19 Aug 2024 15:00:00 +0000</lastBuildDate><atom:link href="https://blog.prokulski.science/tags/r/index.xml" rel="self" type="application/rss+xml"/><item><title>Newsletter Dane i Analizy, 2024-08-19</title><link>https://blog.prokulski.science/2024/08/19/newsletter-dane-i-analizy-2024-08-19/</link><pubDate>Mon, 19 Aug 2024 15:00:00 +0000</pubDate><guid>https://blog.prokulski.science/2024/08/19/newsletter-dane-i-analizy-2024-08-19/</guid><description>&lt;p&gt;Dzisiaj sporo materiałów z ulubionej chyba działki redaktora naczelnego, czyli coś o data engineeringu (najlepiej opakowanym w Pythona). Mamy więc bardzo fajny tekst o tym jak śledzić autobusy szkolne - w wielu polskich miastach pojazdy komunikacji miejskiej wyposażona są w nadajniki GPS, co pozwala na śledzenie ich w czasie rzeczywistym (warszawskie dane są dostępne na przykład &lt;a href="https://api.um.warszawa.pl/files/9fae6f84-4c81-476e-8450-6755c8451ccf.pdf"&gt;tutaj&lt;/a&gt; (link do dokumentacji w PDF) czy też ogólnie na &lt;a href="https://api.um.warszawa.pl/"&gt;stronie WWW&lt;/a&gt;).&lt;/p&gt;&#10;&lt;p&gt;Nieco więcej niż zwykle dzisiaj o języku R - o tym jak z jego pomocą szybko przygotować atrakcyjne dashboardy &lt;em&gt;z kodu&lt;/em&gt; oraz o tym, że mamy odpowiednik &lt;strong&gt;tidyverse&lt;/strong&gt; dla prac z modelami machine learning.&lt;/p&gt;</description></item><item><title>Newsletter Dane i Analizy, 2023-06-12</title><link>https://blog.prokulski.science/2023/06/12/newsletter-dane-i-analizy-2023-06-12/</link><pubDate>Mon, 12 Jun 2023 15:00:00 +0000</pubDate><guid>https://blog.prokulski.science/2023/06/12/newsletter-dane-i-analizy-2023-06-12/</guid><description>&lt;p&gt;Piękna, słoneczna (przynajmniej ma Mazurach i w Warszawie) pogoda w &amp;ldquo;długi weekend&amp;rdquo; pozwoliła (mam nadzięję) na trochę wytchnienia od komputerów, programowania, budowania modeli i tworzenia sztucznych inteligencji. Po odpoczynku można do tego wrócić :)&lt;/p&gt;&#10;&lt;p&gt;A właśnie - budowanie większości modeli ML/AI sprowadza się do kilku podstawowych i powtarzalnych etapów:&lt;br&gt;&#10;gromadzenie danych przegląd danych i ich wzajemnych zależności czyszczenie i uzupełnianie braków dobór hiperparametrów do modelu trenowanie modelu ocena jego jakości użycie modelu na nowych danych&lt;/p&gt;</description></item><item><title>Newsletter Dane i Analizy, 2022-10-10</title><link>https://blog.prokulski.science/2022/10/10/newsletter-dane-i-analizy-2022-10-10/</link><pubDate>Mon, 10 Oct 2022 15:00:00 +0000</pubDate><guid>https://blog.prokulski.science/2022/10/10/newsletter-dane-i-analizy-2022-10-10/</guid><description>&lt;p&gt;Dzisiaj prawdziwa bomba na początek - szczegółowy esej na temat wykorzystania uczenia maszynowego na rynku akcji. Tekst obejmuje projekt systemu, który konsekwentnie pokonywał S&amp;amp;P 500, dopóki nie został zamknięty w lipcu 2022 roku. Jest tu wiele, w tym dyskusja na temat dynamiki rynku, podejścia do modelowania, stosu technologicznego, inżynierii funkcji, pipeline ML i nie tylko. Czyta się długo, ale warto! &lt;a href="https://principiamundi.com/posts/didact-anatomy/"&gt;&lt;strong&gt;Didact AI: The anatomy of an ML-powered stock picking engine&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Poza tym sporo dzisiaj materiałów o przetwarzaniu tekstu (na róźnym poziomie zaawansowania), kilka &lt;em&gt;przydasiów&lt;/em&gt; do Apache Kafka, nauka SQLAlchemy (czyli &lt;em&gt;jak w Pythonie gadać z bazami danych&lt;/em&gt;).&lt;/p&gt;</description></item><item><title>Newsletter Dane i Analizy, 2022-05-16</title><link>https://blog.prokulski.science/2022/05/16/newsletter-dane-i-analizy-2022-05-16/</link><pubDate>Mon, 16 May 2022 15:00:00 +0000</pubDate><guid>https://blog.prokulski.science/2022/05/16/newsletter-dane-i-analizy-2022-05-16/</guid><description>&lt;p&gt;Łączyłem kiedyś accesssowe VBA z R - da się, nawet spoko działa. A było to tak, że Access wypluwał dane do CSV - chyba za pośrednictwem Excela, nie pamiętam - potem R to mieliło i robiło wykres, który wstawiany był jako obrazek do raportu opartego na szablonie zrobionym w&amp;hellip; VBA piszącym do Excela. Jak to cudo odziedziczyłem to przepisałem na Shiny produkujące PDFa z RMarkdowna i potrzebujący sobie sami te raporty robili, a nie czekali aż ja ręcznie te accessowe cuda odpalę (i zablokuję sobie komputer, bo przecież &amp;ldquo;raporty się generują&amp;rdquo;). O tym jak łączyć Excela z R czy Pythonem przeczytacie dzisiaj.&lt;/p&gt;</description></item><item><title>Newsletter Dane i Analizy, 2022-01-17</title><link>https://blog.prokulski.science/2022/01/17/newsletter-dane-i-analizy-2022-01-17/</link><pubDate>Mon, 17 Jan 2022 15:00:00 +0000</pubDate><guid>https://blog.prokulski.science/2022/01/17/newsletter-dane-i-analizy-2022-01-17/</guid><description>&lt;p&gt;Dzisiaj więcej o &lt;em&gt;data engineering&lt;/em&gt; i nowym buzz wordzie z tej okolicy: &lt;strong&gt;data mesh&lt;/strong&gt; a także seria polecanych kanałów. Trochę też o architekturze systemów - wywiad z architektem i coś o tym czy mikroserwisy są lepsze niż monolityczne byty.&lt;/p&gt;&#10;&lt;p&gt;Interesują Cię takie tematy? Czy jednak żywy kod i konkretne problemy analizy cyferek to lepsze &lt;em&gt;mięso&lt;/em&gt;?&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="analiza_danych_koncepcje"&gt;#analiza_danych_koncepcje&lt;/h3&gt;&#10;&lt;p&gt;&lt;a href="https://levelup.gitconnected.com/auto-detect-anything-with-custom-named-entity-recognition-ner-c89d6562e8e9"&gt;&lt;strong&gt;Auto-Detect Anything With Custom Named Entity Recognition (NER)&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&#10;Rozpoznawanie nazw własnych z wykorzystaniem SpaCy&lt;/p&gt;</description></item><item><title>Newsletter Dane i Analizy, 2021-12-06</title><link>https://blog.prokulski.science/2021/12/06/newsletter-dane-i-analizy-2021-12-06/</link><pubDate>Mon, 06 Dec 2021 15:00:00 +0000</pubDate><guid>https://blog.prokulski.science/2021/12/06/newsletter-dane-i-analizy-2021-12-06/</guid><description>&lt;p&gt;Na Mikołajki przegląd internetu pod kątem danych, ich analiz i sposobów programowania oraz wdrażania zaprogramowanych rozwiązań.&lt;br&gt;&#10;Najciekawszym dla początkujących będzie pewnie zbiór ponad 200 tekstów zgromadzonych w jednym miejscu na różne tematy związane z machine learingiem (to prawdę mówiąc trochę jak &lt;a href="https://thecleverprogrammer.com/machine-learning/"&gt;spis treści jednego bloga&lt;/a&gt;), a bardziej doświadczeni dowiedzą się jak połączyć C++ z Pythonem. Są też ciekawe teksty o R (i Shiny), co się ostatnio dość rzadko zdarzało.&lt;/p&gt;&#10;&lt;p&gt;Skoro jesteśmy przy R - w piątek (10 grudnia) zaś konferencja &lt;strong&gt;WhyR?&lt;/strong&gt; - rezerwujcie sobie czas, bo materiału sporo (co widać po zaplanowanych streamingach na YouTube). Więcej szczegółów na stronie imprezy &lt;a href="https://2021.whyr.pl/"&gt;2021.whyr.pl&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Newsletter Dane i Analizy, 2021-06-14</title><link>https://blog.prokulski.science/2021/06/14/newsletter-dane-i-analizy-2021-06-14/</link><pubDate>Mon, 14 Jun 2021 09:00:00 +0000</pubDate><guid>https://blog.prokulski.science/2021/06/14/newsletter-dane-i-analizy-2021-06-14/</guid><description>&lt;p&gt;&lt;a href="https://chollinger.com/blog/2021/04/raspberry-pi-gardening-monitoring-a-vegetable-garden-using-a-raspberry-pi-part-1/"&gt;&lt;strong&gt;Raspberry Pi Gardening: Monitoring a Vegetable Garden using a Raspberry Pi - Part 1&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&#10;On how growing vegetables is more complicated how it looks, why bad soldering still works, on moving individual bits around, and what I learned about using technology where one probably does not need technology.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://towardsdatascience.com/air-piano-using-opencv-and-python-298cb22097d9?source=rss----7f60cf5620c9---4"&gt;&lt;strong&gt;Air Piano using OpenCV and Python&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&#10;Play the piano by just moving your fingers in the air! Taken from Unsplash My inspiration to make an “Air Piano” Recently I visited my cousin and she had been trying to learn piano for quite some time. However, due to the pandemic, her teacher could not come home and they were practising through (&amp;hellip;)&lt;/p&gt;</description></item><item><title>Newsletter Dane i Analizy, 2021-06-07</title><link>https://blog.prokulski.science/2021/06/07/newsletter-dane-i-analizy-2021-06-07/</link><pubDate>Mon, 07 Jun 2021 09:00:00 +0000</pubDate><guid>https://blog.prokulski.science/2021/06/07/newsletter-dane-i-analizy-2021-06-07/</guid><description>&lt;p&gt;&lt;a href="https://towardsdatascience.com/3-examples-that-show-the-unlimited-flexibility-of-pyspark-319ab22d5a?source=rss----7f60cf5620c9---4"&gt;&lt;strong&gt;3 Examples That Show The Unlimited Flexibility of PySpark&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&#10;A combination of Python and SQL but easier than both Spark is an analytics engine used for large-scale data processing. It lets you spread both data and computations over clusters to achieve a substantial performance increase. It is easier than ever to collect, transfer, and store data. Hence, we (&amp;hellip;)&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://cmdlinetips.com/2021/06/row-wise-operations-in-r/"&gt;&lt;strong&gt;Row-wise operations in R: compute row means in tidyverse&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&#10;This tutorial shows how to perform row-wise operations in R using tidyverse. We will use three key functions, rowwise(), c_across() and rowMeans() to perform to perform row-wise operations on a dataframe. rowwise() and c_across() functions are from dplyr. rowwise() function is available in dplyr (&amp;hellip;)&lt;/p&gt;</description></item><item><title>Newsletter Dane i Analizy, 2021-05-10</title><link>https://blog.prokulski.science/2021/05/10/newsletter-dane-i-analizy-2021-05-10/</link><pubDate>Mon, 10 May 2021 09:00:00 +0000</pubDate><guid>https://blog.prokulski.science/2021/05/10/newsletter-dane-i-analizy-2021-05-10/</guid><description>&lt;p&gt;&lt;a href="https://blog.dataiku.com/how-to-perform-basic-ml-serving-with-python-docker-kubernetes"&gt;&lt;strong&gt;How to Perform Basic ML Serving With Python, Docker, and Kubernetes&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&#10;This tutorial provides a basic, step-by-step example of real-time serving a machine learning (ML) model as a REST API with Python, Docker, and Kubernetes. We’ll build a basic REST API with Python, test it locally with Docker, and deploy our API with Kubernetes. By the way, if you want to go faster, (&amp;hellip;)&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://www.r-bloggers.com/2021/05/dockerizing-shiny-applications/"&gt;&lt;strong&gt;Dockerizing Shiny Applications&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&#10;Docker provides isolation to applications. Images are immutable. Running multiple instances of the same image can serve many users at the same time. All these general advantages of containerized applications apply to Shiny apps too. The post Dockerizing Shiny Applications first appeared on (&amp;hellip;)&lt;/p&gt;</description></item><item><title>Latający premierzy</title><link>https://blog.prokulski.science/2019/08/20/latajacy-premierzy/</link><pubDate>Tue, 20 Aug 2019 15:49:02 +0000</pubDate><guid>https://blog.prokulski.science/2019/08/20/latajacy-premierzy/</guid><description>&lt;p&gt;Przełom lipca i sierpnia 2019 roku w polskiej polityce zdominowany był przez informacje o lotach - najpierw marszałka Sejmu, później kolejnych premierów. KPRM opublikował listę lotów kolejnych premierów z ostatnich kilku lat - zobaczmy czego nie zrobiły z nią media?&lt;/p&gt;&#10;&lt;p&gt;Listy te (na dzień 18 sierpnia 2019 roku) dostępne były pod linkami:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://www.premier.gov.pl/files/files/pdt_-_loty.pdf"&gt;Donald Tusk&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.premier.gov.pl/static/files/files/loty_premier_ewy_kopacz.pdf"&gt;Ewa Kopacz&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.premier.gov.pl/static/files/files/loty_premier_beaty_szydlo.pdf"&gt;Beata Szydło&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.premier.gov.pl/static/files/files/pmm_-_loty.pdf"&gt;Mateusz Morawiecki&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Nie znalazłem w żadnych mediach sensownego porównania pomiędzy premierami, więc porównam sobie sam. Przy okazji pokazując jak można w kilkadziesiąt minut przygotować rzetelny materiał.&lt;/p&gt;</description></item><item><title>(Inteligentne) Raporty na żądanie</title><link>https://blog.prokulski.science/2019/08/07/raporty-na-zadanie/</link><pubDate>Wed, 07 Aug 2019 20:17:22 +0000</pubDate><guid>https://blog.prokulski.science/2019/08/07/raporty-na-zadanie/</guid><description>&lt;p&gt;Dzisiaj przygotujemy narzędzia do automatycznego generowania raportów, które będzie (quasi) inteligentnie odpowiadać na pytania zadane przez email.&lt;/p&gt;&#10;&lt;p&gt;Czyli jak pozbyć się upierdliwej pracy (i zająć się czymś innym)&lt;/p&gt;&#10;&lt;p&gt;Uwaga: wraz z aktualizacją pakietu &lt;em&gt;gmailr&lt;/em&gt; do wersji 1.0 prezentowany poniżej kod związany z logowaniem do konta może nie działać. Przeczytaj proszę &lt;a href="https://github.com/r-lib/gmailr"&gt;informacje&lt;/a&gt; o tym jak to zmienić Kod na &lt;a href="https://github.com/prokulski/automatic_reports"&gt;GitHubie&lt;/a&gt; powinien być ok.&lt;/p&gt;&#10;&lt;p&gt;Problem z jakim można się często spotkać w korporacjach to wysyłanie tych samych raportów mailem. Wyobraźmy sobie taki scenariusz:&lt;/p&gt;</description></item><item><title>Gole w europejskich ligach</title><link>https://blog.prokulski.science/2019/04/24/gole-w-europejskich-ligach/</link><pubDate>Wed, 24 Apr 2019 13:21:16 +0000</pubDate><guid>https://blog.prokulski.science/2019/04/24/gole-w-europejskich-ligach/</guid><description>&lt;p&gt;Skąd padają gole? Jak poruszają się piłkarze podczas meczu? Czy zawodnicy podają zawsze do tych samych?&lt;/p&gt;&#10;&lt;p&gt;Wszystkiego tego można się dowiedzieć jak tylko ma się odpowiednie dane… Warto przeglądać czasem Reddita - można znaleźć np. &lt;a href="https://www.reddit.com/r/datasets/comments/bg1el1/soccer_shots_dataset/"&gt;Soccer shots dataset&lt;/a&gt; (post już jest skasowany, ale kto pierwszy ten lepszy) zawierający link do &lt;a href="https://drive.google.com/open?id=1yeIl0rZldsmmRzdGUkG56QmX7UXI0PHQ"&gt;arkusza z danymi&lt;/a&gt; zeskrapowanymi z ciekawej strony &lt;a href="https://understat.com/"&gt;understat.com&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Skoro ktoś &lt;em&gt;zdjął&lt;/em&gt; te dane i udało mi się zapisać do nich link to wykorzystajmy je!&lt;/p&gt;</description></item><item><title>Instagram - zbieranie danych i bot</title><link>https://blog.prokulski.science/2019/03/27/instagram-w-r/</link><pubDate>Wed, 27 Mar 2019 14:28:51 +0000</pubDate><guid>https://blog.prokulski.science/2019/03/27/instagram-w-r/</guid><description>&lt;p&gt;Konto na Instagramie mam od kwietnia 2012 roku, ale nie zajmuje on mojego czasu (nie zaglądam tam wcale). Kiedyś chciałem sprawdzić czy zdjęcia z tagu #warszawa są zrobione w Warszawie, ale nie sprawdziłem… Do dzisiaj.&lt;/p&gt;&#10;&lt;p&gt;Tekst &lt;strong&gt;&lt;a href="https://medium.com/@chrisbuetti/how-i-eat-for-free-in-nyc-using-python-automation-artificial-intelligence-and-instagram-a5ed8a1e2a10"&gt;How I Eat For Free in NYC Using Python, Automation, Artificial Intelligence, and Instagram&lt;/a&gt;&lt;/strong&gt; który robi furorę w ostatnich dniach sprawił, że wreszcie ruszyłem tyłek i zająłem się tematem. Kilka miesięcy temu widziałem tutorial &lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=BGU2X5lrz9M"&gt;How to Get Instagram Followers/Likes Using Python&lt;/a&gt;&lt;/strong&gt;, dzisiaj spróbujemy w R.&lt;/p&gt;</description></item><item><title>Najpopularniejsze imiona dzieci nadane w 2018 roku</title><link>https://blog.prokulski.science/2019/03/05/najpopularniejsze-imiona-dzieci-nadane-w-2018-roku/</link><pubDate>Tue, 05 Mar 2019 16:07:11 +0000</pubDate><guid>https://blog.prokulski.science/2019/03/05/najpopularniejsze-imiona-dzieci-nadane-w-2018-roku/</guid><description>&lt;p&gt;Niedawno Ministerstwo Cyfryzacji opublikowało &lt;a href="https://www.gov.pl/web/cyfryzacja/imiona"&gt;listę najpopularniejszych imion&lt;/a&gt; nadawanych dzieciom w 2018 roku. Wykorzystamy to do połączenia Pythona z R (albo R z Pythonem).&lt;/p&gt;&#10;&lt;p&gt;Lista opublikowana została w postaci serii tekstów na stronach Ministerstwa, w formie całkowicie niezjadliwej. Co więcej - prasa podała informacje dalej, bez żadnego obrobienia tych danych. Zróbmy to więc jak należy przy okazji łącząc R i Pythona.&lt;/p&gt;&#10;&lt;p&gt;Aby móc w RStudio używać Pythona oraz mieć dostęp do obiektów Pythona w sesji R potrzebujemy biblioteki &lt;em&gt;&lt;a href="https://rstudio.github.io/reticulate/"&gt;reticulate&lt;/a&gt;&lt;/em&gt; - polecam się z nią zapoznać. Daje ciekawe możliwości, które właśnie za chwilę zobaczymy na konkretnym przykładzie.&lt;/p&gt;</description></item><item><title>Analiza ofert pracy</title><link>https://blog.prokulski.science/2019/02/18/analiza-ofert-pracy/</link><pubDate>Mon, 18 Feb 2019 21:42:14 +0000</pubDate><guid>https://blog.prokulski.science/2019/02/18/analiza-ofert-pracy/</guid><description>&lt;p&gt;Ile jest pracy dla ludzi zajmujących się analizą danych i machine learningiem? Jakiej pracy w Polsce jest najwięcej? Czy widać podział na &lt;em&gt;Polskę A&lt;/em&gt; i &lt;em&gt;Polskę B&lt;/em&gt; w ofertach pracy?&lt;/p&gt;&#10;&lt;p&gt;Nie znalazłem żadnych raportów ani badań na ten temat. Największy (chyba) portal z ofertami pracy Pracuj.pl publikuje co jakiś czas &lt;strong&gt;&lt;a href="http://media.pracuj.pl/48161-rynek-pracy-specjalistow-2018-kogo-szukali-pracodawcy"&gt;raport&lt;/a&gt;&lt;/strong&gt;, ale to nie to. Już lepsze są wyniki &lt;strong&gt;&lt;a href="https://insights.stackoverflow.com/survey/2018/"&gt;ankiet prowadzonych przez Stackoverflow&lt;/a&gt;&lt;/strong&gt; ale to są dane globalne. Najbliższe temu czego szukałem były raporty np. &lt;a href="http://obserwatorium.wup.lodz.pl/index.php/analiza-tresci"&gt;dla województwa łódzkiego&lt;/a&gt;, ale najnowszy dotyczy wiosny 2015 roku (zresztą najnowsza aktualność na tej stronie to grudzień 2015…). Łódzki raport robiło pięć osób, to co poniżej robiłem sam. Może więc mieć swoje niedoskonałości, ale mam nadzieję że będzie dla Was interesujący.&lt;/p&gt;</description></item><item><title>Testowanie rozkładu, hipotez i regresja logistyczna</title><link>https://blog.prokulski.science/2019/01/24/rozklad-normalny-hipotezy-i-regresja-logistyczna/</link><pubDate>Thu, 24 Jan 2019 17:33:14 +0000</pubDate><guid>https://blog.prokulski.science/2019/01/24/rozklad-normalny-hipotezy-i-regresja-logistyczna/</guid><description>&lt;p&gt;Dzisiaj trochę nadrabiana statystyki za pomogą R. Zobaczymy jak przetestować czy rozkład jest normalny, jak przetestować hipotezy i jak zbudować prosty model.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tidyverse&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;broom&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;knitr&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;kableExtra&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Za dane przykładowe posłużą nam dane o wzroście i wadze w podziale na płeć. Wczytujemy dane - użyjemy &lt;a href="https://www.kaggle.com/mustafaali96/weight-height"&gt;zestawu danych z Kaggle&lt;/a&gt; (ściągnąłem je wcześniej na dysk):&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;data &lt;span style="color:#0550ae"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#6639ba"&gt;read_csv&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;weight-height.csv&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# szybki rzut oka w dane&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;glimpse&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;data&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## Observations: 10,000&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## Variables: 3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## $ Gender &amp;lt;chr&amp;gt; &amp;#34;Male&amp;#34;, &amp;#34;Male&amp;#34;, &amp;#34;Male&amp;#34;, &amp;#34;Male&amp;#34;, &amp;#34;Male&amp;#34;, &amp;#34;Male&amp;#34;, &amp;#34;Male&amp;#34;, &amp;#34;…&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## $ Height &amp;lt;dbl&amp;gt; 73.84702, 68.78190, 74.11011, 71.73098, 69.88180, 67.2530…&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## $ Weight &amp;lt;dbl&amp;gt; 241.8936, 162.3105, 212.7409, 220.0425, 206.3498, 152.212…&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dziwne te liczby: wzrost w okolicach 70? Waga blisko 200? Dane są amerykańskie, więc wzrost mamy w calach, a wagę w funtach. Nie musimy, ale możemy przeliczyć to na jednostki metryczne - będzie nam łatwiej interpretować wyniki.&lt;/p&gt;</description></item><item><title>Podsumowanie 2018 roku na blogu</title><link>https://blog.prokulski.science/2019/01/04/2018-na-blogu/</link><pubDate>Fri, 04 Jan 2019 12:47:59 +0000</pubDate><guid>https://blog.prokulski.science/2019/01/04/2018-na-blogu/</guid><description>&lt;p&gt;Początek roku to dobry czas na podsumowanie roku poprzedniego. Wykorzystajmy więc ten moment i podsumujmy 2018. Oczywiście z użyciem R.&lt;/p&gt;&#10;&lt;p&gt;W zeszłym roku dokonałem &lt;a href="../../2018/01/04/2017-na-blogu/"&gt;analogicznego podsumowania&lt;/a&gt; opartego jedynie o dane z Google Analytics. Tym razem skorzystamy bezpośrednio z danych zawartych w postach (ale uzupełnimy je o dane z Google Analytics), dla ułatwienia wyciągniętych z bazy danych.&lt;/p&gt;&#10;&lt;p&gt;Chciałbym dowiedzieć się kilku rzeczy o moim pisaniu w 2018 roku:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Jakich słów używałem najczęściej?&lt;/li&gt;&#10;&lt;li&gt;Czy da się podzielić posty na tematy?&lt;/li&gt;&#10;&lt;li&gt;Jak długo żyją posty (ile dni po publikacji są czytane)?&lt;/li&gt;&#10;&lt;li&gt;Czy istnieje korelacja pomiędzy liczbą wizyt a liczbą komentarzy?&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Ja to wszystko wiem na bieżąco, ale pokażę Wam jak to zrobić. A nuż przyjdzie komuś przeprowadzić podobną analizę? Antyweb, Spider’s Web, Niebezpiecznik - Was przeanalizowałbym najchętniej pod tym kątem :) Grzesiek, Przemek, Piotrek - piszcie na maila! Potrale nawet chętniej…&lt;/p&gt;</description></item><item><title>Facebook w R</title><link>https://blog.prokulski.science/2018/10/16/facebook-w-r/</link><pubDate>Tue, 16 Oct 2018 15:04:18 +0000</pubDate><guid>https://blog.prokulski.science/2018/10/16/facebook-w-r/</guid><description>&lt;p&gt;Kto uważany jest za gwiazdę rozrywki 100-lecia niepodległej Polski?&#10;Takie pytanie pojawiło się w poniedziałek 15 października na &lt;a href="https://www.facebook.com/Karolina-Korwin-Piotrowska-180340042008871/"&gt;fanpage’u Karoliny Korwin-Piotrowskiej&lt;/a&gt;. Pani Karolina poprosiła o wpisywanie nazwisk w komentarzach. Oczywiście obudził się we mnie umysł &lt;em&gt;pragmatyczny&lt;/em&gt; i zapytał (siebie): &lt;strong&gt;ciekawe jak ona to ręcznie sobie policzy?&lt;/strong&gt;. Ludzie przecież będą wpisywać nazwiska jak leci a nie w jakiejś uporządkowanej formie.&#10;Bo ankietę można zrobić tak jak ta &lt;strong&gt;&lt;a href="http://shiny.prokulski.science/regiony/"&gt;majonezowo-ketchupowa&lt;/a&gt;&lt;/strong&gt; do której wypełnienia serdecznie namawiam! Jak będzie dużo głosów to będzie sensowny wynik. I opowieść jak to wszystko zostało zbudowane. Zajmie Ci to góra dwie minuty.&#10;Nie po to człowiek siedzi w internecie i analizie danych, żeby z takim problemem sobie nie poradził. A że w R jest dostępny pakiet &lt;strong&gt;Rfacebook&lt;/strong&gt; to zadanie policzenia głosów jest banalnie proste.&#10;Poza &lt;em&gt;Rfacebook&lt;/em&gt; przyda nam się kilka innych pakietów (w sumie standard):&lt;/p&gt;</description></item><item><title>Kategoryzacja użytkowników strony www</title><link>https://blog.prokulski.science/2018/10/02/kategoryzacja-klientow/</link><pubDate>Tue, 02 Oct 2018 09:50:33 +0000</pubDate><guid>https://blog.prokulski.science/2018/10/02/kategoryzacja-klientow/</guid><description>&lt;p&gt;Jak podzielić użytkowników strony internetowej na grupy? Korzystając tylko ze statystyk ruchu.&#10;&lt;a href="../../2018/09/26/google-analytics-w-r/"&gt;W poprzedniej części&lt;/a&gt; dowiedzieliśmy się jak skorzystać z danych z Google Analytics w R. Pod koniec wpisu podałem linki do postów, które opisują jak dodać unikalne ID użytkownika wchodzącego na stronę. Dzisiaj zajmiemy się próbą przypisania każdego z użytkowników do jakiejś grupy.&#10;&lt;strong&gt;Kategoryzacja klientów to jedno z podstawowych działań w biznesie.&lt;/strong&gt; Dlaczego? Możemy zechcieć coś innego pokazać na naszej stronie różnym grupom klientów. Albo - jeśli mamy na przykład maile (z zapisów na newsletter) wysłać inne treści. Znajomość klientów i ich zachowań to podstawa.&#10;Spróbujemy na podstawie posiadanych danych określić grupy klientów. Tymi danymi mogą być odwiedziny na stronie WWW albo wyświetlenie reklamy w aplikacji w telefonie, zakupy w rzeczywistym sklepie, udział w jakimś wydarzeniu (na przykład pójście do kina). Zwróćcie uwagę, że w każdym z wymienionych przypadków wiemy zazwyczaj nieco więcej:&lt;/p&gt;</description></item><item><title>Google Analytics w R</title><link>https://blog.prokulski.science/2018/09/26/google-analytics-w-r/</link><pubDate>Wed, 26 Sep 2018 16:16:34 +0000</pubDate><guid>https://blog.prokulski.science/2018/09/26/google-analytics-w-r/</guid><description>&lt;p&gt;Google Analytics to chyba najpopularniejszy sposób mierzenia ruchu na stronach internetowych. Można bardzo dużo &lt;em&gt;wyklikać&lt;/em&gt; w panelu, ale może zaistnieć potrzeba pobrania danych statystycznych do analiz, których GA nie daje. Dzisiaj dowiesz się jak zrobić to w języku R.&#10;Jak większość zadań, tak samo i to ma pomocny pakiet. Jak można się podziewać pakiet nazywa się &lt;strong&gt;&lt;a href="https://github.com/Tatvic/RGoogleAnalytics"&gt;RGoogleAnalytics&lt;/a&gt;&lt;/strong&gt; i dostępny jest poprzez instalację z GitHuba:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;devtools&lt;span style="color:#0550ae"&gt;::&lt;/span&gt;&lt;span style="color:#6639ba"&gt;install_github&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Tatvic/RGoogleAnalytics&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Załadujmy więc go do R (razem z innymi pakietami) i do dzieła:&lt;/p&gt;</description></item><item><title>Kto pisze teksty przemówień prezydenta Dudy?</title><link>https://blog.prokulski.science/2018/09/20/kto-pisze-teksty-prezydenta-dudy/</link><pubDate>Thu, 20 Sep 2018 16:13:07 +0000</pubDate><guid>https://blog.prokulski.science/2018/09/20/kto-pisze-teksty-prezydenta-dudy/</guid><description>&lt;p&gt;Pytanie tytułowe jest nieco przewrotne. Sprawdzimy czy wystąpienia są do siebie podobne, a przede wszystkim dowiemy się jak to zrobić. Nazwisk autorów wystąpień nie podam…&#10;Niniejszy tekst to fragment (ale rozbudowany i zmodyfikowany) &lt;a href="https://mlforum.pl/agenda/#wyklad07"&gt;mojej prezentacji&lt;/a&gt; z konferencji “Machine Learning @ Enterprise”. Całość prezentacji z odpowiednimi skryptami znajdziecie &lt;a href="https://github.com/prokulski/ML_Forum"&gt;na GitHubie&lt;/a&gt;.&#10;Dzisiaj skorzystamy z bibliotek:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tidyverse&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# wykresy i manipulacja danymi&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;data.table&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# dla fread - szybkie wczytywanie plików CSV&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;lsa&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# dla cosine()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;Rtsne&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# implementacja t-SNE w R&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;plotly&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# interaktywne wykresy&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tidytext&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# do manipulacji tekstem&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;wordcloud&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# chmurki słów&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;lubridate&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# manipulacja datami&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rvest&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# do pobierania danych z www&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;glue&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# wygodne sklejanie ciągów znaków&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;W pierwszym kroku potrzebujemy &lt;strong&gt;wypowiedzi Andrzeja Dudy&lt;/strong&gt;. Na szczęście wszystko jest podane na tacy na &lt;a href="http://www.prezydent.pl/aktualnosci/wypowiedzi-prezydenta-rp/wystapienia/"&gt;oficjalnej stronie prezydenta&lt;/a&gt;, a jedyne czego potrzebujemy to wyłuskać teksty. Do tego celu przygotujemy kawałek kodu:&lt;/p&gt;</description></item><item><title>Zmiany w Polsce a głosowanie w ONZ</title><link>https://blog.prokulski.science/2018/08/17/zmiany-w-polsce-a-glosowanie-w-onz/</link><pubDate>Fri, 17 Aug 2018 11:45:37 +0000</pubDate><guid>https://blog.prokulski.science/2018/08/17/zmiany-w-polsce-a-glosowanie-w-onz/</guid><description>&lt;p&gt;Czy zmiany w Polsce (koniec PRL, wstąpienie do NATO i UE) mają odzwierciedlenie w głosowaniu w Zgromadzeniu Ogólnym Organizacji Narodów Zjednoczonych? Kto jest (a kto był) naszym przyjacielem a z kim nam nie jest po drodze?&#10;Dzisiejszy wpis to sporo kodu (dość prostego, często powtórzonego - nie programujcie w ten sposób!), a całość podzielić można na kilka części:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;a href="#opis-narzedzi"&gt;opis użytych narzędzi&lt;/a&gt;&lt;/strong&gt; - dwa nowe (na blogu) pakiety: &lt;code&gt;widyr&lt;/code&gt; oraz &lt;code&gt;unvotes&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;a href="#przygotowanie-danych"&gt;przygotowanie danych&lt;/a&gt;&lt;/strong&gt; do dalszej pracy&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Właściwa analiza zaczyna się od&lt;/p&gt;</description></item><item><title>Gdzie są sklepy, drogi czy cokolwiek innego?</title><link>https://blog.prokulski.science/2018/08/10/wykorzystanie-open-street-map-w-r/</link><pubDate>Fri, 10 Aug 2018 18:49:05 +0000</pubDate><guid>https://blog.prokulski.science/2018/08/10/wykorzystanie-open-street-map-w-r/</guid><description>&lt;p&gt;Zastanawialiście się skąd wziąć listę wszystkich miejsc danego typu - na przykład przedszkola w Warszawie - i narysować je na mapie? Jeśli tak, to z tego postu dowiesz się jak to zrobić. Wpis techniczny, żadna tam analiza. Ale są mapki!&#10;Macie świadomość, że istnieje coś takiego jak Wikipedia, prawda? Zbiór haseł uzupełniany przez ochotników. Istnieje coś podobnego dla map i nazywa się &lt;a href="https://wiki.openstreetmap.org/"&gt;Open Street Map&lt;/a&gt;. Ludzie z całego świata dodają informacje o różnych obiektach na mapach - &lt;em&gt;budują&lt;/em&gt; drogi, &lt;em&gt;stawiają&lt;/em&gt; domki i tak dalej. Dane te można pokazać jako mapy, ale też przeszukiwać. W R mamy pakiet &lt;strong&gt;&lt;a href="https://ropensci.github.io/osmdata/"&gt;osmdata&lt;/a&gt;&lt;/strong&gt; (przygotowany przez zacną inicjatywę &lt;a href="https://ropensci.org/"&gt;rOpenSci&lt;/a&gt;, a jest opakowaniem dla &lt;a href="https://wiki.openstreetmap.org/wiki/Overpass_API"&gt;Overpass API&lt;/a&gt;), który umożliwi nam skorzystanie z tych informacji. W dalszej części do pokazania (na interaktywnych, przesuwanych i skalowanych) map użyjemy pakietu &lt;strong&gt;&lt;a href="http://rstudio.github.io/leaflet/"&gt;leaflet&lt;/a&gt;&lt;/strong&gt; (opierający się na bibliotece JavaScript &lt;a href="https://leafletjs.com/"&gt;Leaflet&lt;/a&gt;, który nota bene również korzysta z Open Street Map.&#10;Ciekawostka na marginesie: ostatnio Google zmienił drastycznie ceny używania Google Maps (ciekawy tekst na ten temat znajdziecie &lt;a href="https://www.gdziepolek.pl/blog/pozegnanie-z-google-maps"&gt;tutaj&lt;/a&gt;), zatem korzystanie z Open Street Map może być wybawieniem.&#10;Zaczniemy od wczytania odpowiednich bibliotek:&lt;/p&gt;</description></item><item><title>Shiny - punkty z mapki</title><link>https://blog.prokulski.science/2018/07/05/shiny-punkty-z-mapki/</link><pubDate>Thu, 05 Jul 2018 10:41:45 +0000</pubDate><guid>https://blog.prokulski.science/2018/07/05/shiny-punkty-z-mapki/</guid><description>&lt;p&gt;Jak pobrać współrzędne punktu wskazanego na mapie?&#10;Czasem istnieje potrzeba, aby w aplikacji (napisanej w Shiny) użytkownik wskazał jakąś lokalizację na mapie. Jak to zrobić?&#10;Bardzo szybki wpis, który rozwiązuje konkretny problem. Ot - takie StackOverflow ;).&#10;Trzeba narysować mapę - do map interaktywnych bardzo wygodny jest pakiet &lt;em&gt;leaflet&lt;/em&gt;, który opakowuje nam bibliotekę &lt;strong&gt;&lt;a href="https://leafletjs.com/"&gt;Leaflet&lt;/a&gt;&lt;/strong&gt; napisaną w Java Script. Przy okazji: podobnie robi &lt;em&gt;plotly&lt;/em&gt; - obie ta biblioteki są proste w użyciu, a dają bardzo atrakcyjne efekty w postaci interaktywnych map czy wykresów.&#10;Po narysowaniu mapy ustawiamy marker na jej środku i dostosowujemy widoczny obszar.&#10;Pozostaje tylko czekać na &lt;em&gt;event&lt;/em&gt; (zdarzenie) z Shiny. Nasza aplikacja zareaguje na zdarzenie w obiekcie mapy. Odpowiednie zmienne zawierają współrzędne klikniętego punktu. Teraz wystarczy usunąć wszystkie dodane &lt;em&gt;markery&lt;/em&gt; i na nowo dodać jednej w klikniętym miejscu. Dodatkowo w poniższym kodzie wypisujemy współrzędne klikniętego punktu.&lt;/p&gt;</description></item><item><title>Mapy hipsometryczne</title><link>https://blog.prokulski.science/2018/06/28/mapy-hipsometryczne/</link><pubDate>Thu, 28 Jun 2018 09:08:59 +0000</pubDate><guid>https://blog.prokulski.science/2018/06/28/mapy-hipsometryczne/</guid><description>&lt;p&gt;Jak wykorzystać dane o numerycznym modelu terenu (NMT)? Skąd je wziąć i jak przygotować do wygodniej pracy?&#10;Dzisiaj wpis mocno techniczny, bez szczególnych analiz. Gratka dla osób szukających sposobów na rozdzielenie danych punktowych na gminy, powiaty i województwa oraz wskazówki jak pokazywać takie dane na mapie (i agregować je zgodnie z podziałem terytorialnym). Oprzemy się na danych o wysokości terenu, ale to tylko przykład.&#10;Potrzebne nam będą następujące biblioteki:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tidyverse&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# do wszystkiego :)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rvest&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# do srappingu strony&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rgdal&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# do obsługi plików SHP&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rgeos&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;raster&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;ggmap&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# do wczytania mapy z Google Maps&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;sf&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# do wczytywania plików SHP i łatwego rysowania&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;RPostgreSQL&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# do zapisu i odczytu danych z bazy, w tym przypadku baza PostgreSQL&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kolejne fragmenty kodu to kilka skryptów złączonych w jedno. Stąd mogą trafić się powtórzenia w kodzie albo te same dane pod różnymi nazwami zmiennych. Nie przejmujcie się tym - czytając kod i rozumiejąc go znajdziecie sposób na wybranie tego, co najbardziej Was interesuje.&#10;Zaczniemy od zgromadzenia danych o wysokości terenu. Centralny Ośrodek Dokumentacji Geodezyjnej i Kartograficznej (CODGiK) &lt;a href="http://www.codgik.gov.pl/index.php/darmowe-dane/nmt-100.html"&gt;udostępnia takie dane&lt;/a&gt; w postaci plików tekstowych (jeden plik to jedno województwo). Struktura plików jest bardzo prosta - w każdym wierszu mamy informację dla jednego punktu: współrzędne punktu i jego wysokość nad poziomem morza. Pliki na serwerze CODGiK są spakowane - pobierzmy je i rozpakujmy.&#10;Aby nie bawić się w ręczne pobieranie każdego pliku zeskanujmy automatycznie stronę i wyciągnijmy linki do plików. Nie raz już &lt;em&gt;scrappowaliśmy&lt;/em&gt; strony, więc pójdzie łatwo:&lt;/p&gt;</description></item><item><title>Stawiamy własny serwer</title><link>https://blog.prokulski.science/2018/06/14/serwer-vps-dla-r-python/</link><pubDate>Thu, 14 Jun 2018 11:29:30 +0000</pubDate><guid>https://blog.prokulski.science/2018/06/14/serwer-vps-dla-r-python/</guid><description>&lt;p&gt;Budujemy własny serwer do programowania w R i Pythonie, razem z serwerem WWW, PHP oraz bazami danych MySQL i PostgreSQL.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#opis-srodowiska"&gt;Opis środowiska&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#zakupy"&gt;Zakupy&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#konfigurujemy-vpsa"&gt;Konfigurujemy VPSa&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#r-rstudio-i-shiny"&gt;R, RStudio i Shiny&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#python-i-jupyter"&gt;Python i Jupyter&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#subdomeny-konfiguracja"&gt;Subdomeny - konfiguracja&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#dodatki"&gt;Dodatki&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#koniec"&gt;Koniec&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Tym razem więcej administrowana serwerami, a mniej programowania i analizowania danych. Zbudujemy własny serwer do programowania w R i Pythonie, razem z serwerem WWW (aby móc prezentować wynik swoich prac).&lt;/p&gt;&#10;&lt;h3 id="opis-środowiska"&gt;Opis środowiska&lt;/h3&gt;&#10;&lt;p&gt;W niniejszym wpisie przygotujemy serwer zbudowany na linuxie w dystrybucji &lt;strong&gt;Ubuntu&lt;/strong&gt; z działającym na nim (i dostępnym przez przeglądarkę z dowolnego miejsca z internetem) &lt;strong&gt;RStudio&lt;/strong&gt;. Serwer pozwoli nam też na budowanie i publikowanie aplikacji napisanych w &lt;strong&gt;Shiny&lt;/strong&gt;. Przy okazji zainstalujemy &lt;strong&gt;Python&lt;/strong&gt;a razem z &lt;strong&gt;Jupyter Notebook&lt;/strong&gt; (oraz &lt;strong&gt;JupyterLab&lt;/strong&gt;) do wygodnej pracy. Całości dopełni baza danych &lt;strong&gt;PostgreSQL&lt;/strong&gt;. Aby móc publikować swoje dzieła w formie bloga zainstalujemy &lt;strong&gt;PHP&lt;/strong&gt; oraz bazy &lt;strong&gt;MySQL&lt;/strong&gt; - być może zechcesz zainstalować WordPressa, a on tego wymaga.&#10;&lt;strong&gt;Do czego taka maszyna może się przydać?&lt;/strong&gt; W zależności od wydajności:&lt;/p&gt;</description></item><item><title>Webscrapping w R</title><link>https://blog.prokulski.science/2018/06/05/webscrapping-w-r/</link><pubDate>Tue, 05 Jun 2018 16:26:22 +0000</pubDate><guid>https://blog.prokulski.science/2018/06/05/webscrapping-w-r/</guid><description>&lt;p&gt;W dzisiejszym wpisie nieco bardziej techniczne sprawy, ale bardzo cenne dla osób, które przy pomocy R chcą pobierać dane ze stron WWW.&#10;Przedstawię trzy narzędzia, które w tym pomogą. Dwa pomogą na pewno, trzecie to bardziej ciekawostka do robienia screen shotów.&lt;/p&gt;&#10;&lt;h3 id="jak-dobrać-się-do-tabelki-na-stronie"&gt;Jak dobrać się do tabelki na stronie?&lt;/h3&gt;&#10;&lt;p&gt;Często jakieś dane, które nas interesują są opublikowane na stronach WWW. Można je przepisać ręcznie, można je wciągnąć do Excela (jest odpowiedni, w miarę intuicyjny importer tabelek dostępny pod guzikiem &lt;em&gt;Z sieci Web&lt;/em&gt; w menu Dane). Ale nas interesuje oczywiście w R (i Python, ale to nie w tym odcinku).&#10;W dzisiejszych zajęciach przydadzą nam się biblioteki:&lt;/p&gt;</description></item><item><title>R-base, R-dplyr, R-data.table i Python</title><link>https://blog.prokulski.science/2018/05/23/r-i-python/</link><pubDate>Wed, 23 May 2018 15:44:07 +0000</pubDate><guid>https://blog.prokulski.science/2018/05/23/r-i-python/</guid><description>&lt;p&gt;Podstawy manipulacji danymi w tabelkach. W R (trzy wersje) oraz w Pythonie. Bo to pierwszy post z cyklu &lt;em&gt;idziemy w stronę Pythona&lt;/em&gt;.&#10;W dzisiejszym wpisie zajmiemy się podstawowymi operacjami na tabelach (data frame) z danymi. &lt;strong&gt;Dlaczego to jest ważne?&lt;/strong&gt; Są to najczęściej wykonywane operacje w trakcie analizy danych, bo przecież:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;dane trzeba wczytać &lt;em&gt;do komputera&lt;/em&gt;&lt;/li&gt;&#10;&lt;li&gt;czasem zmodyfikować, na przykład policzyć wartość na podstawie dwóch lub więcej kolumn&lt;/li&gt;&#10;&lt;li&gt;wybrać określone wiersze lub określone kolumny&lt;/li&gt;&#10;&lt;li&gt;połączyć jedną tabelę z inną&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Z tak przygotowanych danych można później na przykład narysować wykres czy też wrzucić je do modelu. I to jest wystarczające, na co dowodem jest pewnie z 70% moich wpisów z ostatnich 12 miesięcy (albo i więcej). Kolejne 20% wpisów to sposób pozyskania danych. 10% było pewnie o modelach wszelakich.&#10;Osobiście uważam, że w R nauczyłem się na tyle dużo, aby przejść na kolejny poziom. W pracy są to aplikacje w Shiny czy też panele w wykorzystaniem &lt;em&gt;flexdashboard&lt;/em&gt; (znowu: w obu przypadkach 70% pracy to manipulacja danymi w tabelkach), ale ciągnie mnie do Pythona. Gdybym zaczynał przygodę z machine learning czy data science to wybrałbym Pythona. Jednocześnie mam nadzieję, że dla osób znających jeden z języków niniejszy wpis będzie ciekawym wprowadzeniem w drugi język.&#10;Jeśli chodzi o R to zobaczymy jak wykonać podstawowe operacje wykorzystując standardowe możliwości R (R-base), wykorzystując pakiety &lt;em&gt;dplyr&lt;/em&gt; (wchodzący w skład ekosystemu &lt;em&gt;tidyverse&lt;/em&gt;) oraz &lt;em&gt;data.table&lt;/em&gt;. W przykładach dla Pythona będzie to &lt;em&gt;pandas&lt;/em&gt;.&#10;Dlaczego data.table? &lt;a href="https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping"&gt;Porównanie prędkości&lt;/a&gt; pokazuje, że dla bardzo dużych tabel data.table jest najszybszy.&#10;Zaczniemy od wczytania odpowiednich bibliotek. W R oczywiście:&lt;/p&gt;</description></item><item><title>Powiadomienia z telefonu i IFTTT.com</title><link>https://blog.prokulski.science/2018/05/08/powiadomienia-z-telefonu-i-ifttt-com/</link><pubDate>Tue, 08 May 2018 14:52:14 +0000</pubDate><guid>https://blog.prokulski.science/2018/05/08/powiadomienia-z-telefonu-i-ifttt-com/</guid><description>&lt;p&gt;Jak dużo powiadomień generuje Android?&#10;Dzisiaj dość proste zadanie, ale może być interesujące.&#10;Od kilku lat jestem użytkownikiem i fanem serwisu &lt;a href="https://ifttt.com"&gt;If This The That&lt;/a&gt; który pozwala na automatyzację wielu zadań. W skrócie polega to na tym, że podpinamy do IFTTT.com swoje konta, aplikacje, urządzenia (żarówki, samochody - bo czemu nie?) i budujemy przepisy (&lt;em&gt;applets&lt;/em&gt;). Każdy przepis to zawsze dwa elementy: wyzwalacz i akcja. Na przykład: jeśli temperatura spadnie poniżej 5 stopni (wyzwalacz) to wyślij maila (akcja). Możemy łączyć ze sobą kilka serwisów (jeśli dodam nowe zdjęcie na Instagramie to zapisz je w Dropboxie), informować o czymś mailem (wyślij maila jeśli prognoza według &lt;a href="https://www.wunderground.com/"&gt;Weather Underground&lt;/a&gt; przewiduje deszcz), zapisywać historię zdarzeń (wszystkie moje twitty zapisz do arkusza Google) czy też zarządzać telefonem (włącz wi-fi jeśli jestem w rejonie oznaczonym jako dom).&#10;I właśnie z połączenia informacji z telefonu zapisywanymi do arkusza Google Sheets skorzystamy. Odpowiedni przepis IFTTT: &lt;strong&gt;jeśli&lt;/strong&gt; &lt;em&gt;Notification received&lt;/em&gt; &lt;strong&gt;to&lt;/strong&gt; &lt;em&gt;add row to Google Drive spreadsheet&lt;/em&gt;.&#10;Po kilku dniach na Dysku Google dostaniemy arkusz, w którym kolejne wiersze to kolejne zdarzenia. Teraz tylko wystarczy dobrać się do tego pliku (ciekawostka - po przekroczeniu 5000 wierszy powstaje nowy plik) i przeanalizować jego zawartość. W wydobyciu plików z Google Drive pomocny będzie pakiet R &lt;strong&gt;&lt;a href="http://googledrive.tidyverse.org/"&gt;googledrive&lt;/a&gt;&lt;/strong&gt;. Zatem do dzieła!&lt;/p&gt;</description></item><item><title>Gdzie Polacy jadą na wakacje?</title><link>https://blog.prokulski.science/2018/04/27/gdzie-polacy-jada-na-wakacje/</link><pubDate>Fri, 27 Apr 2018 09:08:49 +0000</pubDate><guid>https://blog.prokulski.science/2018/04/27/gdzie-polacy-jada-na-wakacje/</guid><description>&lt;p&gt;Gdzie Polacy jadą na wakacje? Jak wyciągnąć w R informacje z PDFa? Jaki związek ma jedno z drugim?&#10;Zgodnie z życzeniem telewidzów ;) wyrażonym w &lt;a href="https://www.facebook.com/DaneAnalizy/posts/1887468214877003"&gt;szybkiej ankiecie&lt;/a&gt; &lt;em&gt;żebro-lajkowej&lt;/em&gt; kilka dni temu&lt;/p&gt;&#10;&lt;p&gt;dzisiaj zajmiemy się wycieczkami (a raczej: zorganizowanymi przez biura podróży wyjazdami) zagranicznymi naszych rodaków. Czyli:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;gdzie Polak jedzie na urlop?&lt;/li&gt;&#10;&lt;li&gt;w ile osób jedzie?&lt;/li&gt;&#10;&lt;li&gt;ile go to kosztuje?&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Bo w ankiecie kciuki w górę wygrały (na obecną chwilę) 69 do 32 z serduszkami.&#10;&lt;strong&gt;Na początek trochę historii.&lt;/strong&gt; Po sukcesie wpisów o &lt;a href="../../2017/04/06/mieszkanie-do-wynajecia/"&gt;mieszkaniach na wynajem&lt;/a&gt; i &lt;a href="../../2018/01/23/sprzedam-opla/"&gt;cenach samochodów&lt;/a&gt; chciałem zająć się wyjazdami z biurami podróży. To byłby hicior. Nawet znalazłem miejsce, z którego trzeba wziąć dane. Takim miejscem są &lt;a href="http://www.pzot.pl/index.php?module=cms/files&amp;amp;group=Raporty%20PZOT"&gt;raporty publikowane przez Polski Związek Organizatorów Turystyki&lt;/a&gt;. Raporty powstają na bazie systemu rezerwacji &lt;a href="http://www.merlinx.pl/"&gt;MerlinX&lt;/a&gt; i to on byłby tym źródłem danych.&#10;Same raporty nie zawierają interesujących mnie danych, na przykład:&lt;/p&gt;</description></item><item><title>Przewidywanie pogody</title><link>https://blog.prokulski.science/2018/04/12/przewidywanie-pogody/</link><pubDate>Thu, 12 Apr 2018 08:42:57 +0000</pubDate><guid>https://blog.prokulski.science/2018/04/12/przewidywanie-pogody/</guid><description>&lt;p&gt;W &lt;a href="../../2018/03/27/lato-bylo-cieplejsze/"&gt;poprzednim odcinku&lt;/a&gt; zebraliśmy dane o pogodzie w Polsce od 1951 roku. Dzisiaj przygotujemy prognozę pogody. Ale przede wszystkim nauczymy się weryfikować modele.&#10;Mając zgromadzone dane o pogodzie z ponad 60 lat (1951-2017) możemy pokusić się o prognozowanie temperatury w przyszłości. Wykorzystamy trzy (właściwie dwa) modele dostępne &lt;em&gt;od ręki&lt;/em&gt; w popularnych bibliotekach R oraz zaprzęgniemy do prognozowania sieć neuronową.&#10;Zaczniemy od potrzebnych bibliotek:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tidyverse&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;lubridate&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;DBI&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# pobieranie danych z bazy SQLite&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;forecast&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# na potrzeby modeli ARIMA i ETS/STLF&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;keras&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# na potrzeby LSTM w TensorFlow&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;corrgram&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# wykres korelacji&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Na początek pobieramy dane o średniej dziennej temperaturze wszystkich stacji w latach 2000-2016. Te dane potraktujemy jako dane treningowe. Dane z 2017 roku potraktujemy jako testowe.&lt;/p&gt;</description></item><item><title>A lato było cieplejsze...</title><link>https://blog.prokulski.science/2018/03/27/lato-bylo-cieplejsze/</link><pubDate>Tue, 27 Mar 2018 10:22:04 +0000</pubDate><guid>https://blog.prokulski.science/2018/03/27/lato-bylo-cieplejsze/</guid><description>&lt;p&gt;Czy w Boże Narodzenie zawsze brakowało śniegu? Czy klimat się ociepla? Jak ciepło przepływa przez Polskę?&#10;Dzisiaj zajmiemy się pogodą. Sporo ciekawych zagadnień przed nami:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Skąd wziąć dane o pogodzie w Polsce?&lt;/li&gt;&#10;&lt;li&gt;Pory roku na przestrzeni lat - czy wiosna przychodzi szybciej? A może lat trwa krócej?&#10;&lt;ul&gt;&#10;&lt;li&gt;zobaczymy procentowy podział dni w roku na poszczególne pory roku (ile było dni wiosennych, a ile zimowych)&lt;/li&gt;&#10;&lt;li&gt;czy wiosna przychodzi coraz szybciej - jak kształtowała się temperatura w marcu na przestrzeni lat?&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Czy klimat się ociepla?&#10;&lt;ul&gt;&#10;&lt;li&gt;jak wyglądały różnice w temperaturze na przestrzeni lat&lt;/li&gt;&#10;&lt;li&gt;czy poszczególne miesiące są coraz cieplejsze lub zimniejsze?&lt;/li&gt;&#10;&lt;li&gt;podobnie dla kolejnych dni - jak wyglądała liczba dni cieplejszych i zimniejszych niż średnia?&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Czy jest różnica miedzy temperaturami w kraju?&#10;&lt;ul&gt;&#10;&lt;li&gt;przygotujemy animowane mapki temperatury dla 2017 roku&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;A kiedyś to było…&#10;&lt;ul&gt;&#10;&lt;li&gt;Boże Narodzenie ze śniegiem&lt;/li&gt;&#10;&lt;li&gt;w Lany Poniedziałek było cieplej&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="pobranie-danych"&gt;Pobranie danych&lt;/h3&gt;&#10;&lt;p&gt;Zanim przejdziemy do analizy potrzebujemy danych o pogodzie. Zgodnie z ustawą o dostępie do danych publicznych IMGW udostępnia dane historycznie na stronie &lt;a href="https://dane.imgw.pl/"&gt;https://dane.imgw.pl/&lt;/a&gt;. Dane aktualne są dostępne poprzez API, ale dane historyczne spakowane już niestety nie. Dostępne są w postaci spakowanych plików CSV, podzielone na kilkanaście katalogów. Do wszystkiego da się jednak dobrać.&#10;Aby skorzystać z tych zasobów należy każdy plik (archiwum) pobrać, rozpakować i wyciągnąć z niego dane. Aby nie operować na dużej liczbie plików przepiszemy je do bazy danych (w tym przypadku będzie to plikowa baza SQLite, chociaż może być dowolna - mySQL, PostgreSQL). &lt;a href="https://github.com/prokulski/Dane-IMGW/blob/master/get_imgw_arch.R"&gt;Skrypt przepisujący dane&lt;/a&gt; znajdziecie na moim githubie (jak i pozostałe poniżej zaprezentowane kody).&lt;/p&gt;</description></item><item><title>Jak zrobić twitterowego bota?</title><link>https://blog.prokulski.science/2018/03/21/jak-zrobic-twitterowego-bota/</link><pubDate>Wed, 21 Mar 2018 09:52:09 +0000</pubDate><guid>https://blog.prokulski.science/2018/03/21/jak-zrobic-twitterowego-bota/</guid><description>&lt;p&gt;Automaty rządzą naszym życiem. Czy tego chcemy czy nie. Szczególnie w sieciach społecznościowych, nawet podobno wygrały wybory prezydenckie w USA (ciekawe czy w Rosji też). Spróbujmy zatem samodzielnie napisać jakiś automat działający w social mediach. W R, chociaż można w czymkolwiek innym.&lt;/p&gt;&#10;&lt;p&gt;Przygotujemy automat (bota), który będzie na Twitterze publikował wybrane przez nas treści. Taki bot już istnieje - to @rstatspl. W tym wpisie znajdziecie informacje jak powstał.&#10;Bot &lt;strong&gt;&lt;a href="https://twitter.com/rstatspl"&gt;@rstatspl&lt;/a&gt;&lt;/strong&gt; robi trzy rzeczy:&lt;/p&gt;</description></item><item><title>Co grało radio?</title><link>https://blog.prokulski.science/2018/03/12/co-gralo-radio/</link><pubDate>Mon, 12 Mar 2018 15:39:04 +0000</pubDate><guid>https://blog.prokulski.science/2018/03/12/co-gralo-radio/</guid><description>&lt;p&gt;Uwielbiam muzykę, lubię radio (chociaż słucham go właściwie tylko w samochodzie), kiedyś przez chwilę uczyłem się w krakowskich stacjach radiowych realizacji dźwięku. Po &lt;strong&gt;Więcej czadu&lt;/strong&gt; miałem wieloletnią fazę, żeby zostać radiowcem.&#10;Radiowcem nie zostałem, ale nad stacjami radiowymi można się trochę poznęcać.&#10;Według badania Radio Track Millward Brown (ostatnie zestawienia można znaleźć na &lt;a href="http://www.wirtualnemedia.pl/tags/radio%20track"&gt;Wirtualnych Mediach&lt;/a&gt;) najpopularniejsze (top 5) w Polsce stacje radiowe to: RMF FM, Radio ZET, Jedynka, ESKA i Trójka. A że istnieje sobie taki serwis jak &lt;a href="https://radiospis.pl/stacja/trojka"&gt;Radiospis.pl&lt;/a&gt; zawierający listę piosenek granych na antenie z ostatnich siedmiu dni to sobie porównamy kto co gra.&#10;Na początek przygotujemy funkcję, która zbierze nam dane ze strony:&lt;/p&gt;</description></item><item><title>LSTM - przewidywanie tekstu (sieci neuronowe, część 4)</title><link>https://blog.prokulski.science/2018/03/05/lstm-przewidywanie-tekstu-keras-r/</link><pubDate>Mon, 05 Mar 2018 12:52:35 +0000</pubDate><guid>https://blog.prokulski.science/2018/03/05/lstm-przewidywanie-tekstu-keras-r/</guid><description>&lt;p&gt;Czy da się napisać tekst za pomocą sieci neuronowych?&#10;Skorzystamy (podobnie jak w przypadku sieci CNN w poprzednich częściach) z TensorFlow opakowanego w Keras. Załadujmy wiec potrzebne pakiety i ustalmy kilka stałych dla kolejnych elementów kodu:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tidyverse&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;keras&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;stringr&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tokenizers&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;## stałe&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# tekst źródłowy&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;book_path &lt;span style="color:#0550ae"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Mroz-Kasacja.txt&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# sterowanie poniższymi parametrami może poprawić model (im więcej tym lepiej),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# na pewno ma wpływ na zapotrzebowanie na pamięć i czas&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# parametry zbioru treningowego&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;maxlen &lt;span style="color:#0550ae"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#0550ae"&gt;30&lt;/span&gt; &lt;span style="color:#57606a"&gt;# wielkość okna&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;max_lines &lt;span style="color:#0550ae"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2000&lt;/span&gt; &lt;span style="color:#57606a"&gt;# ile linii tekstu bierzemy do treningu?&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# parametry sieci&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# co najmniej 20 epochów daje sensowne wyniki&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;EPOCHS &lt;span style="color:#0550ae"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#0550ae"&gt;20&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# liczba neuronów w sieci LSTM - co najmniej 128 daje fajne wyniki, 256 jeszcze fajniejsze&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lstm_neurons &lt;span style="color:#0550ae"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#0550ae"&gt;128&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Za dane treningowe posłuży nam tekst jednej z książek Remigiusza Mroza o Chyłce i Zordonie (o poprzedniego wpisu gdzie &lt;a href="../../2017/06/30/kto-napisal-te-ksiazke/"&gt;analizowałem te książki&lt;/a&gt; zdążyłem przeczytać wszystkie części, a już za chwile kolejna część :) - &lt;em&gt;Kasacja&lt;/em&gt;. Aby przyspieszyć cały proces wybierzemy tylko cześć tekstu (&lt;code&gt;max_lines&lt;/code&gt; powyżej), co jednocześnie pozwoli na ograniczenie potrzebnej ilości pamięci.&lt;/p&gt;</description></item><item><title>MNIST dataset – sieci neuronowe, część 3 (sieć CNN)</title><link>https://blog.prokulski.science/2018/02/20/mnist-dataset-sieci-neuronowe-czesc-3-siec-cnn-w-r/</link><pubDate>Tue, 20 Feb 2018 11:19:42 +0000</pubDate><guid>https://blog.prokulski.science/2018/02/20/mnist-dataset-sieci-neuronowe-czesc-3-siec-cnn-w-r/</guid><description>&lt;p&gt;Ciąg dalszy rozpoznawania pisanych ręcznie liczb. Potraktujemy obrazki jak obrazki (a nie jak wektory).&#10;Dla przypomnienia:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;w &lt;a href="../../2018/01/16/mnist-dataset-sieci-neuronowe-czesc-0/"&gt;zerowej części&lt;/a&gt; przygotowaliśmy zbiór danych (aby finalnie korzystać i tak z tego z Kaggle ;) i zobaczyliśmy jak wyglądają przykładowe liczby&lt;/li&gt;&#10;&lt;li&gt;w &lt;a href="../../2018/02/01/mnist-dataset-sieci-neuronowe-czesc-1/"&gt;części pierwszej&lt;/a&gt; przygotowaliśmy modele w oparciu o &lt;code&gt;XGBoost&lt;/code&gt; (najlepszy osiągnięty wynik to 87.1% trafności przewidywań) oraz o prostą sieć neuronową (FF, feed-forward) z wykorzystaniem pakietu &lt;code&gt;nnet&lt;/code&gt; (najlepszy wyniki to 71.7%, ale liczone to było na fragmencie danych)&lt;/li&gt;&#10;&lt;li&gt;w &lt;a href="../../2018/02/13/mnist-dataset-sieci-neuronowe-czesc-2-keras-w-r/"&gt;części drugiej&lt;/a&gt; zainstalowaliśmy bibliotekę &lt;code&gt;Keras&lt;/code&gt; wraz z back-endem w postaci &lt;code&gt;tensorflow&lt;/code&gt;, poznaliśmy znaczenie współczynników &lt;em&gt;loss&lt;/em&gt;, &lt;em&gt;val_loss&lt;/em&gt;, &lt;em&gt;acc&lt;/em&gt; oraz &lt;em&gt;val_acc&lt;/em&gt; oraz przygotowaliśmy kilka modelów, z których najlepszy dał wynik około 97% poprawności rozpoznania liczb. Zrozumieliśmy (mam nadzieję) również logikę stojącą za budowaniem architektury sieci polegającą na składaniu kolejnych warstw jedna za drugą. Zobaczyliśmy również skąd mogą wynikać błędy klasyfikacji (te różne rodzaje czwórek rozpoznane jako dziewiątki na końcu tekstu)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;W ostatniej dotychczas części cyklu traktowaliśmy dane o każdej z liczb w zbiorze uczącym jako &lt;strong&gt;wektor&lt;/strong&gt; (czyli ciąg 784 liczb). Dzisiaj każdą liczbę potraktujemy &lt;em&gt;poprawnie&lt;/em&gt; - jako &lt;strong&gt;obraz&lt;/strong&gt;.&#10;Zaczniemy od wczytania pakietów oraz danych:&lt;/p&gt;</description></item><item><title>MNIST dataset – sieci neuronowe, część 2 (Keras)</title><link>https://blog.prokulski.science/2018/02/13/mnist-dataset-sieci-neuronowe-czesc-2-keras-w-r/</link><pubDate>Tue, 13 Feb 2018 10:34:35 +0000</pubDate><guid>https://blog.prokulski.science/2018/02/13/mnist-dataset-sieci-neuronowe-czesc-2-keras-w-r/</guid><description>&lt;p&gt;Tym razem przygotujemy środowisko do pracy z Keras i rozpoznamy kilka liczb (ponownie jak poprzednio).&lt;/p&gt;&#10;&lt;h3 id="instalacja-keras"&gt;Instalacja Keras&lt;/h3&gt;&#10;&lt;p&gt;Zaczniemy od instalacji. Potrzebujemy zainstalowanego Pythona na maszynie. W unixach (w tym odcinku korzystam z serwera EC2 w AWS) nie jest to problem, pod Windowsem można zainstalować go na przykład instalując &lt;a href="https://www.anaconda.com/"&gt;Anacondę&lt;/a&gt;.&#10;Kolejny krok to przygotowanie R do pracy z Keras. Najpierw instalujemy bibliotekę &lt;code&gt;keras&lt;/code&gt;:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;install.packages&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;keras&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;a następnie sam silnik:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;keras&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;install_keras&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ta ostatnia funkcja ma trochę parametrów - między innymi odpowiedzialnych z zainstalowanie TensorFlow skompilowanego pod korzystanie z GPU (wykorzystanie kart graficznych do obliczeń - znacznie przyspiesza to cały proces, ale potrzebny jest stosowny sprzęt). Odpowiedni ich opis znajdziecie &lt;a href="https://keras.rstudio.com/reference/install_keras.html"&gt;w dokumentacji&lt;/a&gt;. Szczegółową dokumentację Keras znajdziecie na stronie &lt;a href="https://keras.io/"&gt;Keras.io&lt;/a&gt;.&#10;Proces instalacji nieco trwa za pierwszym razem, później jest już z górki. Przy instalacji na Windowsie może się coś pogryźć w Anacondzie (mi powstało drugie środowisko i trochę z tym trzeba powalczyć). Na maszynie EC2 (szczególnie t2.micro) może być okazać, że zabraknie pamięci (tak się stało dla sieci opisywanych poniżej). Rozwiązaniem jest zwiększenie wielkości tzw. &lt;em&gt;swapu&lt;/em&gt; czyli wirtualnej pamięci, która tak na prawdę jest miejscem na dysku. Znalazłem &lt;a href="https://stackoverflow.com/questions/17173972/how-do-you-add-swap-to-an-ec2-instance"&gt;odpowiednie obejście&lt;/a&gt; na niezastąpionym Stackoverflow. Stosujemy więc zwiększenie swapu, po resecie maszyny wszystko wraca do normy (chyba, że potrzebujemy pozostać przy powiększonym miejscu - odpowiednia zmiana opisana jest też na SO).&lt;/p&gt;</description></item><item><title>MNIST dataset – sieci neuronowe, część 1 (xgboost i nnet)</title><link>https://blog.prokulski.science/2018/02/01/mnist-dataset-sieci-neuronowe-czesc-1/</link><pubDate>Thu, 01 Feb 2018 11:30:10 +0000</pubDate><guid>https://blog.prokulski.science/2018/02/01/mnist-dataset-sieci-neuronowe-czesc-1/</guid><description>&lt;p&gt;Budujemy pierwszą sieć neuronową oraz porównujemy jej wyniki z XGBoost.&#10;W &lt;a href="../../2018/01/16/mnist-dataset-sieci-neuronowe-czesc-0/"&gt;pierwszej części&lt;/a&gt; przygotowaliśmy dane, a i tak będziemy korzystać z &lt;a href="https://www.kaggle.com/c/digit-recognizer/data"&gt;gotowych z Kaggle.com&lt;/a&gt;.&#10;Zanim wkroczymy w sieci neuronowe zobaczmy dla przypomnienia jaki mamy rozkład liczb (ile jest jakich)?&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tidyverse&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# wczytujemy zestaw danych&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;data &lt;span style="color:#0550ae"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#6639ba"&gt;read_csv&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;data/train.csv&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;data &lt;span style="color:#0550ae"&gt;%&amp;gt;%&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;count&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;label&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;%&amp;gt;%&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;ggplot&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt; &lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;geom_col&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;aes&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;as.factor&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;label&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; n&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; fill &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;as.factor&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;n&lt;span style="color:#1f2328"&gt;)),&lt;/span&gt; color &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;gray50&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; show.legend &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#cf222e"&gt;FALSE&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;labs&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;x &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Liczba&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; y &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Liczba obrazków&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="../../downloads/2018/02/nnet_01-1.png" alt=""&gt;&#10;Żeby całość działa się szybciej i potrzebowała mniej pamięci wybierzemy po 250 próbek dla każdej liczby:&lt;/p&gt;</description></item><item><title>Sprzedam Opla</title><link>https://blog.prokulski.science/2018/01/23/sprzedam-opla/</link><pubDate>Tue, 23 Jan 2018 09:17:27 +0000</pubDate><guid>https://blog.prokulski.science/2018/01/23/sprzedam-opla/</guid><description>&lt;p&gt;Auta na sprzedaż - czego można dowiedzieć się z ogłoszeń? Jak ustrzelić okazję?&#10;Tak się zdarzyło, że rozglądam się za samochodem. Ale też na bazie sukcesu &lt;a href="../../2017/04/06/mieszkanie-do-wynajecia/"&gt;analizy ogłoszeń mieszkań na wynajem&lt;/a&gt; z poprzedniego roku postanowiłem przygotować podobny materiał, tym razem o samochodach.&#10;Przez ponad dobę maszyna zbierała informacje z ogłoszeń z serwisu Otomoto.pl. Po kolei, ogłoszenie po ogłoszeniu, skrypt zapisywał dane do lokalnego pliku. Teraz użyjemy tych danych.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tidyverse&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;lubridate&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;stringr&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;forcats&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;ggrepel&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# wczytujemy nasze zgromadzone dane&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;auta_otomoto &lt;span style="color:#0550ae"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#6639ba"&gt;readRDS&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;auta_otomoto.RDS&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;n_offers &lt;span style="color:#0550ae"&gt;&amp;lt;-&lt;/span&gt; auta_otomoto &lt;span style="color:#0550ae"&gt;%&amp;gt;%&lt;/span&gt; &lt;span style="color:#6639ba"&gt;count&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;OfferID&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;%&amp;gt;%&lt;/span&gt; &lt;span style="color:#6639ba"&gt;ungroup&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt; &lt;span style="color:#0550ae"&gt;%&amp;gt;%&lt;/span&gt; &lt;span style="color:#6639ba"&gt;nrow&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Udało się zebrać 40747 ogłoszeń. Niektóre są już nieaktualne (bardzo szybko auta znikają), niektóre z różnych powodów nie nadają się do analizy. Jak wyglądają zgromadzone dane?&lt;/p&gt;</description></item><item><title>MNIST dataset - sieci neuronowe, część 0 (przygotowanie)</title><link>https://blog.prokulski.science/2018/01/16/mnist-dataset-sieci-neuronowe-czesc-0/</link><pubDate>Tue, 16 Jan 2018 15:24:16 +0000</pubDate><guid>https://blog.prokulski.science/2018/01/16/mnist-dataset-sieci-neuronowe-czesc-0/</guid><description>&lt;p&gt;Zaczynamy cykl związany z sieciami neuronowymi. Zaczniemy od przygotowania danych.&#10;W kilku kolejnych postach posłużymy się danymi z ręcznie pisanymi liczbami. Zbiór ten nazywa się MNIST i jest bardzo popularny w świecie &lt;em&gt;datalogów&lt;/em&gt;. Można go pobrać z &lt;a href="http://yann.lecun.com/exdb/mnist/"&gt;tego miejsca&lt;/a&gt;. Klasyfikacja ręcznie pisanych liczb to takie &lt;em&gt;hello world&lt;/em&gt; w sieciach neuronowych.&#10;W kolejnych częściach:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;zbudujemy narzędziownię w R (w oparciu o bibliotekę &lt;a href="http://keras.rstudio.com"&gt;Keras&lt;/a&gt;)&lt;/li&gt;&#10;&lt;li&gt;zbudujemy prostą sieć neuronową i sprawdzimy jakie daje efekty&lt;/li&gt;&#10;&lt;li&gt;zbudujemy sieć konwolucyjną (CNN) i sprawdzimy czy daje lepsze efekty, spróbujemy ją również rozbudować&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Pliki jednak nie są w super przyjaznej formie (na przykład w Excelu nie da się ich otworzyć) - na początek więc przetworzymy je na czytelną formę.&#10;Zgodnie z &lt;a href="http://yann.lecun.com/exdb/mnist/"&gt;opisem&lt;/a&gt; zbiór dzieli się na cztery pliki. Mamy więc dwie (dane treningowe i testowe) paczki: plik określający literki oraz dane opisujące ich wygląd. Pliki są binarne, przetworzymy je na pliki CSV.&lt;/p&gt;</description></item><item><title>Diagnoza, Wataha czy Belfer?</title><link>https://blog.prokulski.science/2017/12/29/diagnoza-wataha-czy-belfer/</link><pubDate>Fri, 29 Dec 2017 10:32:30 +0000</pubDate><guid>https://blog.prokulski.science/2017/12/29/diagnoza-wataha-czy-belfer/</guid><description>&lt;p&gt;Który jesienny serialowy hit był najczęściej komentowany w 2017 roku? Jakie to były komentarze?&#10;Dzisiaj, w ostatnim poście w tym roku, zajmiemy się polskimi serialami z jesiennej ramówki. Na warsztat weźmiemy trzy tytuły: &lt;strong&gt;Diagnozę&lt;/strong&gt; od TVN, &lt;strong&gt;Belfra&lt;/strong&gt; od Canal+ oraz &lt;strong&gt;Watahę&lt;/strong&gt; od HBO. Zobaczymy jak wyglądała &lt;em&gt;obsługa&lt;/em&gt; seriali na Facebooku i jakie towarzyszyły im komentarze.&#10;&lt;strong&gt;Uwaga: post (lub informacje na wykresach) mogą zdradzać fabułę seriali!&lt;/strong&gt;&#10;Kod jest na tyle uniwersalny, że wystarczy podać inne nazwy fanpage’y w części wczytującej dane aby uzyskać podobną analizę dla innych facebookowych stron - na przykład dla partii politycznych.&lt;/p&gt;</description></item><item><title>Mapy, mapy raz jeszcze</title><link>https://blog.prokulski.science/2017/12/22/mapy-w-r-rgeos/</link><pubDate>Fri, 22 Dec 2017 13:42:57 +0000</pubDate><guid>https://blog.prokulski.science/2017/12/22/mapy-w-r-rgeos/</guid><description>&lt;p&gt;W jakim województwie leży wskazany punkt?&#10;Dzisiaj zajmiemy się obszarami, głównie w oparciu o pakiet &lt;code&gt;rgeos&lt;/code&gt;. Wpis raczej techniczny.&#10;Po załadowaniu poniższych pakietów:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rgdal&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rgeos&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tidyverse&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;broom&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# for tidy=fortify&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;przygotujemy sobie dwa testowe obszary, na których przykładzie zobaczymy jak działają wybrane funkcje z pakietu &lt;code&gt;rgeos&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;poly1 &lt;span style="color:#0550ae"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#6639ba"&gt;SpatialPolygons&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;list&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Polygons&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;list&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Polygon&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;coords&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#6639ba"&gt;matrix&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ncol&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; byrow&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;FALSE&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))),&lt;/span&gt; ID&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#6639ba"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;Polygons&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;list&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Polygon&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;coords&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#6639ba"&gt;matrix&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ncol&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; byrow&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;FALSE&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))),&lt;/span&gt; ID&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#6639ba"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;b&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;poly2 &lt;span style="color:#0550ae"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#6639ba"&gt;SpatialPolygons&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;list&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Polygons&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;list&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;Polygon&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;coords&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#6639ba"&gt;matrix&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0.5&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ncol&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; byrow&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;FALSE&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))),&lt;/span&gt; ID&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#6639ba"&gt;c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;c&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Szczerze powiedziawszy &lt;em&gt;mechanika&lt;/em&gt; budowania &lt;em&gt;polygonów&lt;/em&gt; jest koszmarna, ale korzystając z przykładów w sieci udało się je przygotować :) Zobaczmy jak wyglądają nasze obszary:&lt;/p&gt;</description></item><item><title>Parsowanie XMLa w R</title><link>https://blog.prokulski.science/2017/12/14/xml-w-r/</link><pubDate>Thu, 14 Dec 2017 10:14:17 +0000</pubDate><guid>https://blog.prokulski.science/2017/12/14/xml-w-r/</guid><description>&lt;p&gt;Jak w R obsłużyć dane zapisane w XML?&#10;Do redakcji ;-) przychodzą dziesiątki, jeśli nie setki ;-)) maili w których pytacie jak pobrałem dane z Veturilo, które wykorzystałem wiosną tego roku we wpisach &lt;a href="../../2017/05/08/rowery-veturilo-i/"&gt;jeden&lt;/a&gt; oraz &lt;a href="../../2017/05/12/rowery-veturilo-ii/"&gt;dwa&lt;/a&gt;. Pobrałem je z pliku &lt;a href="https://pl.wikipedia.org/wiki/XML"&gt;XML&lt;/a&gt;. Było to w PHP, ale da się też w R. Do obsługi XMLa jest oczywiście odpowiedni pakiet o jakże zaskakującej nazwie &lt;strong&gt;XML&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tidyverse&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# tibble(), %&amp;gt;%&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;lubridate&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# obsługa dat&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;RCurl&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# pobranie plików XML z internetu&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;XML&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# obsługa XMLa&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Zanim dojdziemy do Veturilo przećwiczymy obsługę XMLa na przykładzie kanału RSS (plik dla czytnika RSS jest również XMLem). Jeśli nie znasz składni XMLa warto o niej doczytać.&#10;Za przykład niech posłuży RSS niniejszego bloga. &lt;code&gt;getURL()&lt;/code&gt; z pakietu RCurl pobierze nam zawartość pliku (może to być też plik z dysku - wtedy można go wczytać na przykład przez &lt;code&gt;read_lines()&lt;/code&gt; i skleić linie w jeden ciąg na przykład poprzez &lt;code&gt;paste()&lt;/code&gt; z parametrem &lt;code&gt;collapse = &amp;quot;&amp;quot;&lt;/code&gt;):&lt;/p&gt;</description></item><item><title>Przez losowy las Spotify</title><link>https://blog.prokulski.science/2017/12/10/spotify-random-forest/</link><pubDate>Sun, 10 Dec 2017 10:16:32 +0000</pubDate><guid>https://blog.prokulski.science/2017/12/10/spotify-random-forest/</guid><description>&lt;p&gt;Czy &lt;em&gt;machine learning&lt;/em&gt; może pomóc w poszukiwaniu ulubionej muzyki?&#10;Dzisiaj zajmiemy się poszukiwaniem nowej muzyki. Już kiedyś &lt;a href="../../2017/03/09/poszukiwanie-nowej-muzyki/"&gt;o tym było w oparciu o LastFM&lt;/a&gt;, dzisiaj będzie w oparciu o Spotify. Taki szybki wpis.&#10;Na początek potrzebujemy kilku elementów:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;własnej aplikacji współpracującej z API Spotify - zbudować ją można zaczynając z &lt;a href="https://beta.developer.spotify.com/dashboard/applications"&gt;dashboardu Spotify&lt;/a&gt;, potrzebujemy numerku &lt;code&gt;client_id&lt;/code&gt; i &lt;code&gt;client_secret&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;te numerki wpisujemy do zmiennych o tych samych nazwach i zapisujemy sobie lokalnie (żeby nie przechowywać ich w kodzie) w pliku &lt;code&gt;spotify_cred.rda&lt;/code&gt;. W bardzo prosty sposób: &lt;code&gt;save(client_id, client_secret, file = &amp;quot;spotify_cred.rda&amp;quot;)&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;następnie budujemy kilka funkcji, których będziemy używać. Kod jest długi, nie warto go tutaj zamieszczać - znajdziecie go &lt;a href="https://github.com/prokulski/Spotify/blob/master/spotify_functions.R"&gt;na GitHubie&lt;/a&gt; (swoją drogą jest tam nieco więcej funkcji niż potrzeba, ale nie wszystkie skończone i działające)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Uzbrojeni w taki zestaw zaczynamy od pozyskania tokenu:&lt;/p&gt;</description></item><item><title>Analiza procesów</title><link>https://blog.prokulski.science/2017/12/02/analiza-procesow/</link><pubDate>Sat, 02 Dec 2017 09:27:35 +0000</pubDate><guid>https://blog.prokulski.science/2017/12/02/analiza-procesow/</guid><description>&lt;p&gt;W którym miejscu można skrócić proces, na której fazie trwa on najdłużej?&#10;Dzisiaj zajmiemy się analizą dowolnego procesu, w którym można wskazać jakieś fazy. Zadanie wzięło się z pracy, którą wykonuję na co dzień: który element procesu wytwórczego oprogramowania trwa najdłużej? Czy to, że przygotowanie systemu IT trwa tak długo to wina IT (analiza wymagań, przygotowanie dokumentacji dla programistów, samo programowanie, testy) czy biznesu (przygotowanie wymagań biznesowych, oceny opłacalności rozwiązania, przygotowanie dokumentacji do decyzji wszelakich komitetów sterujących)? Czy jak zamówię przesyłkę dzisiaj to dotrze ona do mnie w krótszym czasie niż przy zamówieniu za miesiąc? Ile czasu będę czekał na pizzę? Dlaczego klient w sklepie (urzędzie, banku, placówce służby zdrowia) obsługiwany jest tak długo? Dlaczego w przychodni zapisuje się na wizyty co 15 minut, jak i tak są opóźnienia?&#10;Weźmy przykład teoretyczny, chociaż dość realny - zakupy przez internet. Możemy wyróżnić kilka podstawowych faz:&lt;/p&gt;</description></item><item><title>Wino</title><link>https://blog.prokulski.science/2017/11/23/wino/</link><pubDate>Thu, 23 Nov 2017 09:01:52 +0000</pubDate><guid>https://blog.prokulski.science/2017/11/23/wino/</guid><description>&lt;p&gt;Jakie wina sprzedają się najlepiej? Czy Polacy lubią wino czerwone czy białe? Słodkie czy wytrawne? Jak wybrać wino dobre i tanie?&#10;Dane na potrzeby analizy pobierzemy ze sklepu internetowego. Odpowiedni skrypt (i pobrane dane) znajdziecie w &lt;a href="https://github.com/prokulski/Wino"&gt;repo na GitHubie&lt;/a&gt;, w pliku &lt;a href="https://github.com/prokulski/Wino/blob/master/get_data.R"&gt;get_data.R&lt;/a&gt;. Skrypt jest dość długi, nie wnosi niczego ciekawego do samej analizy.&#10;Po zebraniu danych możemy przystąpić do EDA (eksploracji danych). Potrzebujemy właściwie tylko pakietu &lt;code&gt;tidyverse&lt;/code&gt; (od zaktualizowanej kilka dni temu wersji w skład ekosystemu wchodzą &lt;code&gt;stringr&lt;/code&gt; i &lt;code&gt;forcats&lt;/code&gt;; w przyszłości przydałoby się jeszcze &lt;code&gt;lubridate&lt;/code&gt; dla kompletu).&#10;Wczytujemy więc zapisane dane, lekko je modyfikujemy (ze względu na późniejszą kolejność i porządek na wykresach).&lt;/p&gt;</description></item><item><title>Sondaże przedwyborcze</title><link>https://blog.prokulski.science/2017/11/17/sondaze-przedwyborcze/</link><pubDate>Fri, 17 Nov 2017 14:36:51 +0000</pubDate><guid>https://blog.prokulski.science/2017/11/17/sondaze-przedwyborcze/</guid><description>&lt;p&gt;Komu rośnie, a komu spada? Czy PSL przekroczy próg 5% i załapie się do Sejmu? Czy “totalna opozycja” już przegrywa z partią rządzącą czy jeszcze nie? Takie pytania rozgrzewają komentatorów polskiej sceny politycznej mniej więcej raz w tygodniu, przy okazji publikacji kolejnych sondaży przedwyborczych.&#10;Zajmiemy się więc tymi sondażami.&#10;Długo szukałem archiwalnych danych sondażowych, aż w końcu na Twitterze ktoś podrzucił linka do serwisu &lt;a href="http://ewybory.eu/"&gt;ewybory.eu&lt;/a&gt;. Przeglądając stronę znalazłem tabelę z tym co mnie interesowało - pełną historią sondaży. Po zerknięciu w kod strony okazuje się, że jest to osadzony arkusz Google Spreadsheets i wystarczy się do niego dobrać. Do samego arkusza się nie dostałem (więc nie udało się wykorzystać mechanizmów jak w poście z &lt;a href="../../2017/10/17/ankieta-wyniki/"&gt;podsumowaniem wyników mojej ankiety&lt;/a&gt;), ale dane można pobrać z publicznego widoku HTML tego arkusza:&lt;/p&gt;</description></item><item><title>Urodziny w Wikipedii</title><link>https://blog.prokulski.science/2017/11/09/urodzenia-wg-wikipedii/</link><pubDate>Thu, 09 Nov 2017 16:21:41 +0000</pubDate><guid>https://blog.prokulski.science/2017/11/09/urodzenia-wg-wikipedii/</guid><description>&lt;p&gt;Przedstawiciele jakiego zawodu są najczęściej opisywani w Wikipedii? Czy miesiąc urodzenia predysponuje do wykonywania danego zawodu? Czy w polskiej Wiki więcej jest o Polakach czy innych nacjach?&lt;/p&gt;&#10;&lt;h3 id="pomysł"&gt;Pomysł&lt;/h3&gt;&#10;&lt;p&gt;Któregoś dnia, &lt;em&gt;&lt;a href="http://teksty.org/swietliki,nieprzysiadalnosc,tekst-piosenki"&gt;siedzimy w knajpie z J.P.&lt;/a&gt;&lt;/em&gt; a właściwie z J.A., z okazji jego urodzin. I tak od słowa do słowa pada “a dzisiaj urodziny ma też Putin”. Sprawdzamy w Wikipedii - faktycznie. A oprócz J.A. i Putina urodziny ma cała masa piłkarzy. I aktorów. I to mnie natchnęło - czym zajmują się (albo zajmowali) osoby opisane w Wikipedii? Którego &lt;em&gt;zawodu&lt;/em&gt; jest najwięcej? Wydawałoby się, że ludzi kultury, sztuki i polityki - tak by wypadało, bo tak było zawsze w encyklopedii. Sprawdzimy jak jest naprawdę.&lt;/p&gt;</description></item><item><title>Ankieta - wyniki (i jak je podsumować w R)</title><link>https://blog.prokulski.science/2017/10/17/ankieta-wyniki/</link><pubDate>Tue, 17 Oct 2017 16:38:17 +0000</pubDate><guid>https://blog.prokulski.science/2017/10/17/ankieta-wyniki/</guid><description>&lt;p&gt;Wyniki ankiety to jedno, a drugie to narzędzie do ich uzyskania i przedstawienia. Łączymy przyjemne z pożytecznym.&#10;Ankietę przygotowałem korzystając z &lt;a href="https://docs.google.com/forms/"&gt;Google Forms&lt;/a&gt; - to jedna z najwygodniejszych opcji (systemów do ankiet jest wiele), szczególnie jeśli chcemy mieć od razu dane (odpowiedzi) w postaci tabeli (w tym przypadku arkusza Google Sheets). Kiedy ankieta jeszcze trwała przygotowałem poniższe skrypty i na bieżąco mogłem śledzić zarówno liczbę oddanych głosów jak i rozkład poszczególnych odpowiedzi. To bardzo przydatne jeśli z jakiegoś powodu chcielibyście wiedzieć jak wpływają różne akcje zarówno na wypełnienie (liczbę odpowiedzi) jak i same odpowiedzi.&#10;Jeśli interesują Cię tylko wyniki ankiety, a nie sposób ich wyciągnięcia i pokazania - przejdź do &lt;strong&gt;&lt;a href="#ankieta-wyniki"&gt;odpowiedniej sekcji&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Kalendarz z Policją</title><link>https://blog.prokulski.science/2017/10/14/kalendarz-z-policja/</link><pubDate>Sat, 14 Oct 2017 09:54:47 +0000</pubDate><guid>https://blog.prokulski.science/2017/10/14/kalendarz-z-policja/</guid><description>&lt;p&gt;W jednym z ostatnich odcinków “Ucha prezesa” było coś o tym, że teraz rząd ma mówić o tym, że jest bezpiecznie (zamiast “Przez osiem lat Polki i Polacy…”). Sprawdzimy zatem bezpieczeństwo na polskich drogach. Ale punktem wyjścia będzie specyficzny sposób pokazania danych dziennych.&lt;/p&gt;&#10;&lt;h2 id="widok-kalendarza"&gt;Widok kalendarza&lt;/h2&gt;&#10;&lt;p&gt;Dane dzienne (takie, które mają jedną wartość dla każdego dnia - na przykład średnia temperatura, liczba osób robiących zakupy w sklepie) można pokazać na różne sposoby. Można pokazać je jako wykres punktowy (lub liniowy, kiedy punkty są połączone) - wówczas widać na przykład “falkę” (o ile są cykliczne, na przykład w weekendy jest mniej kupujących niż w tygodniu). Można policzyć średnie (lub zastosować inne miary agregujące) dla każdego dnia tygodnia i wykorzystać najprostszy (i często najlepszy) wykres słupkowy. A można pokazać to samo w formie swego rodzaju heat-mapy rozpiętej na kalendarzu.&#10;Wykres taki ma sens jeśli chcemy pokazać, że w danym dniu tygodnia (i być może poszczególnych tygodniach roku) coś odbiega od normy z całego tygodnia (albo innych miesięcy). Czyli przykładowe weekendy są inne niż dni od poniedziałku do piątku.&#10;Jeśli interesują Cię tylko wyniki przeglądu statystyk policyjnych - &lt;strong&gt;przejdź do &lt;a href="#wypadki-drogowe"&gt;analizy&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Kto pracuje najbardziej efektywnie w Europie?</title><link>https://blog.prokulski.science/2017/10/09/kto-pracuje-najbardziej-efektywnie-w-europie/</link><pubDate>Mon, 09 Oct 2017 13:41:04 +0000</pubDate><guid>https://blog.prokulski.science/2017/10/09/kto-pracuje-najbardziej-efektywnie-w-europie/</guid><description>&lt;p&gt;Czy wydajność pracy w różnych krajach Europy jest jednakowa? Jak skorzystać z danych Eurostatu w R?&#10;Jestem fanem facebookowej &lt;a href="https://www.facebook.com/JakubMarian"&gt;strony z różnymi mapkami&lt;/a&gt;. Na stronie tej pokazał się ostatnio obrazek z informacją o średniej liczbie godzin jaką w pracy spędzają mieszkańcy poszczególnych krajów (linkował do &lt;a href="https://jakubmarian.com/average-hours-worked-per-worker-per-week-in-europe/"&gt;tego postu&lt;/a&gt;). Ale szczerze powiedziawszy co to za informacja? &lt;strong&gt;To czy siedzisz w pracy długo czy krótko nie ma (bezpośrednio) związku z tym ile wartości wypracujesz.&lt;/strong&gt;&#10;Sprawdźmy ile warta (w rozumieniu produktu krajowego brutto) jest godzina pracy mieszkańca poszczególnych krajów Europy.&#10;Do tego celu skorzystamy z &lt;a href="http://ec.europa.eu/eurostat"&gt;danych Eurostatu&lt;/a&gt;, tym bardziej że istnieje bardzo wygodny pakiet &lt;strong&gt;R&lt;/strong&gt;, z którym takie działanie jest banalnie proste.&#10;Na początek musimy znaleźć odpowiednie dane. Pakiet &lt;em&gt;eurostat&lt;/em&gt; dostarcza nam odpowiednich funkcji:&lt;/p&gt;</description></item><item><title>Kulki w Monte Carlo</title><link>https://blog.prokulski.science/2017/10/04/metoda-monte-carlo/</link><pubDate>Wed, 04 Oct 2017 08:01:23 +0000</pubDate><guid>https://blog.prokulski.science/2017/10/04/metoda-monte-carlo/</guid><description>&lt;p&gt;Symulacje to coś, do czego komputery nadają się najlepiej. Zamiast liczyć na kartce wykorzystujemy maszynę i dostajemy wynik. Dzisiaj policzymy liczbę Pi i przeanalizujemy pewien teleturniej telewizyjny.&lt;/p&gt;&#10;&lt;h2 id="liczba-pi-i-metoda-monte-carlo"&gt;Liczba Pi i metoda Monte Carlo&lt;/h2&gt;&#10;&lt;p&gt;Policzymy wartość liczby Pi… upuszczając ołówek na kartkę. Możecie zrobić to samodzielnie, albo wykorzystując metodę Monte Carlo.&#10;Metoda &lt;strong&gt;&lt;a href="https://pl.wikipedia.org/wiki/Metoda_Monte_Carlo"&gt;Monte Carlo&lt;/a&gt;&lt;/strong&gt; to numeryczny sposób rozwiązywania problemów. Wykonujemy bardzo dużo obliczeń (opartych o losowe symulacje) i na podstawie ich wyniku coś określamy.&#10;Metoda została opracowana przez &lt;a href="https://pl.wikipedia.org/wiki/Stanis%C5%82aw_Ulam"&gt;Stanisława Ulama&lt;/a&gt;, który należał do tak zwanej &lt;a href="https://pl.wikipedia.org/wiki/Lwowska_szko%C5%82a_matematyczna"&gt;lwowskiej szkoły matematycznej&lt;/a&gt; i był między innymi współtwórcą amerykańskiej bomby termojądrowej (co akurat powinno wzbudzić &lt;em&gt;szacun&lt;/em&gt; a nie jakiś postrach). Ulam był też jednym z pierwszych naukowców, którzy wykorzystywali w swych pracach komputer. Możecie (zachęcam!) obejrzeć &lt;a href="https://www.youtube.com/watch?v=hzbnCtvaueo"&gt;film o lwowskiej szkole matamatycznej&lt;/a&gt; pochodzący z kanału &lt;em&gt;Historia Bez Cenzury&lt;/em&gt; - mam nadzieję, że wzbudzi Wasz podziw (i odkrycie ludzkich cech u matematyków) dla polskich przedwojennych matematyków. Każdy kto miał na studiach matematykę (wszystkie uczelnie techniczne) zapewne słyszał o &lt;em&gt;przestrzeni Banacha&lt;/em&gt;. Tak, ma to związek z lwowską szkołą, a Banach zresztą pochowany jest na &lt;a href="http://www.osmol.pl/2014/10/cmentarz-lyczakowski-spoczywa-polski-lwow/"&gt;Cmentarzu Łyczakowskim&lt;/a&gt;, podobnie jak wielu innych znanych Polaków (ze znanych ze szkoły nazwisk: Maria Konopnicka i Gabriela Zapolska).&#10;Wróćmy jednak do naszego eksperymentu. Polega on na losowym upuszczeniu (na przykład) ołówka, tak aby zaznaczył punkt na kartce. Wcześniej na tej kartce rysujemy koło i opisany na nim kwadrat. Ołówkiem rzucamy z góry tak, aby trafić w kwadrat. Liczymy liczbę rzutów i liczbę trafień w koło.&#10;Zamiast robić to ręcznie wykorzystamy komputer (i oczywiście R). Zamiast rzucania wylosujemy punkt:&lt;/p&gt;</description></item><item><title>Pablo Picasso - życie i twórczość... w liczbach</title><link>https://blog.prokulski.science/2017/09/29/pablo-picasso-zycie-i-tworczosc/</link><pubDate>Fri, 29 Sep 2017 14:43:13 +0000</pubDate><guid>https://blog.prokulski.science/2017/09/29/pablo-picasso-zycie-i-tworczosc/</guid><description>&lt;p&gt;Co prawda nie jest to teleturniej &lt;em&gt;Wielka Gra&lt;/em&gt;, ale tytuł przywodzi na myśl temat “Pablo Picasso - jego życie i twórczość”. Zajmiemy się obrazami i ich analizą.&#10;Oczywiście tytuł nie jest przypadkowy i (starszym) Czytelnikom powinien się z &lt;em&gt;Wielką grą&lt;/em&gt; skojarzyć. Ale ilu z Was pamięta ten program? Pięcioro? Myślę nad ankietą, &lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=C9xXkLsB4C8"&gt;a teraz w planie, mamy badanie!&lt;/a&gt;&lt;/strong&gt;…&#10;Celem dzisiejszego wpisu jest sprawdzenie czy “okres czerwony” w malarstwie Picassa rzeczywiście był czerwony. Oczywiście sprawdzimy to przy pomocy &lt;strong&gt;R&lt;/strong&gt;, w pewnym sensie &lt;em&gt;oglądając&lt;/em&gt; obrazy (automatycznie). Dowiemy się też kilku rzeczy o strukturze obrazu komputerowego (totalne przedszkole).&#10;Zaczniemy od początku, czyli krok pierwszy:&lt;/p&gt;</description></item><item><title>Migracje Polaków w 2016 roku (część druga)</title><link>https://blog.prokulski.science/2017/09/26/migracje-polakow-w-2016-roku-czesc-druga/</link><pubDate>Tue, 26 Sep 2017 15:59:18 +0000</pubDate><guid>https://blog.prokulski.science/2017/09/26/migracje-polakow-w-2016-roku-czesc-druga/</guid><description>&lt;p&gt;W &lt;a href="../../2017/09/21/migracje-polakow-w-2016-roku-czesc-pierwsza/"&gt;pierwszej części&lt;/a&gt; przygotowaliśmy zestaw narzędzi do uzyskania informacji skąd przyjechali mieszkańcy danej gminy oraz dokąd wyjechali. Oparliśmy się o dane GUSu o migracjach z 2016 roku. Obiecałem, że &lt;em&gt;there is an app for this&lt;/em&gt; - dzisiaj taką aplikację przygotujemy.&#10;&lt;strong&gt;Uwaga&lt;/strong&gt; wpis jest mocno techniczny (i w dodatku dla co najmniej średnio zaawansowanych p&lt;strong&gt;R&lt;/strong&gt;ogramistów). Jeśli interesuje Cię wynik (gotowa aplikacja) najlepiej przejdź na &lt;strong&gt;&lt;a href="http://54.148.83.91/shiny/rstudio/migracje/?utm_source=skiplink&amp;amp;utm_medium=blog"&gt;stronę aplikacji&lt;/a&gt;&lt;/strong&gt; i się nią pobaw do woli. Powinna być zrozumiała :)&#10;Skorzystamy z pobranych wcześniej danych, ale rozważania prowadzić będziemy na poziomie powiatów. Zatem potrzebujemy zagregować dane o migracjach do powiatów oraz wykorzystać mapę powiatów (zamiast gmin). Zgodnie z wcześniejszymi uwagami - zobaczymy względny ruch, a nie bezwzględną liczbę osób zmieniających miejsce zamieszkania (stałego zamieszkania, bo dane GUSu dotyczą osób zmieniających meldunek).&#10;Większość danych mamy już przygotowanych i cała droga będzie krótsza. Z poniższych pakietów&lt;/p&gt;</description></item><item><title>Migracje Polaków w 2016 roku (część pierwsza)</title><link>https://blog.prokulski.science/2017/09/21/migracje-polakow-w-2016-roku-czesc-pierwsza/</link><pubDate>Thu, 21 Sep 2017 16:16:18 +0000</pubDate><guid>https://blog.prokulski.science/2017/09/21/migracje-polakow-w-2016-roku-czesc-pierwsza/</guid><description>&lt;p&gt;Chcesz wiedzieć skąd pochodzą mieszkańcy Twojej gminy? Albo jak narysować mapę dowolnej wartości na poziomie gmin, powiatów lub województw?&#10;Coś podobnego zrobiło jakiś czas temu &lt;a href="http://biqdata.wyborcza.pl/jak-przenosimy-sie-z-miast-do-miasta-czyli-imigracja-emigracja"&gt;BIQdata&lt;/a&gt;, po sieci krążyło ostatnio to samo dla Stanów Zjednoczonych. Dzisiaj nauczymy się jak to zrobić samodzielnie. A w następnej części przygotujemy aplikację (wow!).&#10;Jedziemy zatem z pakietami, a później szczegółową instrukcją na zdobycie danych.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tidyverse&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;broom&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;rgdal&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="baza-nazw-gmin-powiatów-i-województw"&gt;Baza nazw gmin, powiatów i województw&lt;/h2&gt;&#10;&lt;p&gt;Potrzebujemy danych o nazwach gmin, powiatów i województw przyporządkowanych do kodów TERYT. Takie dane znajdziemy w GUSie na &lt;a href="http://eteryt.stat.gov.pl/eTeryt/rejestr_teryt/udostepnianie_danych/baza_teryt/uzytkownicy_indywidualni/pobieranie/pliki_pelne.aspx?contrast=default"&gt;odpowiedniej stronie&lt;/a&gt;, z której pobieramy archiwum &lt;strong&gt;TERC / podstawowa&lt;/strong&gt; i rozpakowujemy ZIPa, z którego potrzebny nam plik CSV.&lt;/p&gt;</description></item><item><title>Analiza tekstów z wiadomości</title><link>https://blog.prokulski.science/2017/09/14/analiza-tekstow-z-wiadomosci/</link><pubDate>Thu, 14 Sep 2017 09:09:09 +0000</pubDate><guid>https://blog.prokulski.science/2017/09/14/analiza-tekstow-z-wiadomosci/</guid><description>&lt;p&gt;O czym w wiadomościach piszą serwisy internetowe? Czy da się jakoś pogrupować teksty? Wszystko to (i więcej) na bazie ponad roku tekstów z serwisu &lt;a href="http://wiadomosci.gazeta.pl/"&gt;Wiadomości Gazeta.pl&lt;/a&gt;.&#10;Zanim przejdziemy do analizy potrzebujemy danych.&#10;&lt;strong&gt;Jeśli interesują Cię wyniki&lt;/strong&gt; to &lt;strong&gt;przejdź&lt;/strong&gt; od razu &lt;strong&gt;do części &lt;a href="#analiza"&gt;Analiza&lt;/a&gt;.&lt;/strong&gt; Pierwsza część to obszerny opis tego jak uzyskać dane. Pojawiają się w komentarzach (tutaj albo na fanpage’u &lt;strong&gt;&lt;a href="http://fb.com/DaneAnalizy"&gt;Dane i analizy&lt;/a&gt;&lt;/strong&gt; czy też mailach do mnie) o to jak pobierać dane z WWW - poniżej znajdziecie wystarczająco szczegółowy algorytm postępowania. Wiedza na temat HTMLa i CSSa jest przydatna i do zdobycia samodzielnie.&lt;/p&gt;</description></item><item><title>Liczba bezrobotnych a liczba mieszkańców</title><link>https://blog.prokulski.science/2017/09/08/liczba-bezrobotnych-a-liczba-mieszkancow/</link><pubDate>Fri, 08 Sep 2017 10:37:26 +0000</pubDate><guid>https://blog.prokulski.science/2017/09/08/liczba-bezrobotnych-a-liczba-mieszkancow/</guid><description>&lt;p&gt;Bezrobocie spada, bo wszyscy wyjechali - czy to prawda?&#10;Z miesiąca na miesiąc spada bezrobocie w Polsce. I co więcej - spada zgodnie z przewidywaniami, zgodnie z najprostszym modelem predykcji szeregów czasowych, co opisywałem &lt;a href="../../2017/04/26/prognoza-stopy-bezrobocia-na-2017-2018/"&gt;pod koniec kwietnia&lt;/a&gt;.&#10;Różne mogą być przyczyny spadku bezrobocia. Może to być &lt;em&gt;prozaiczne&lt;/em&gt; jest więcej pracy (bo gospodarka przyspiesza, firmy mają pieniądze na nowych pracowników). Ale &lt;em&gt;złe ludzkie języki&lt;/em&gt; mogą krytykować rządzących mówiąc, że wszyscy już wyjechali do Anglii czy Irlandii, więc nie ma bezrobotnych. &lt;strong&gt;Sprawdźmy czy to może być prawda.&lt;/strong&gt;&#10;W rozważaniach skorzystamy z danych publikowanych przez GUS i porównamy czy zmiana stopy bezrobocia jest równa (lub porównywalna) zmianie liczby mieszkańców. Jeśli bezrobocie spadło o na przykład 5 punktów procentowych (z 10% na 5%) to czy liczba mieszkańców też spadła o 5% (z 1000 do 950 osób)? Jeśli tak by było to oznaczałoby, że:&lt;/p&gt;</description></item><item><title>Jak nauczyć się R? Co czytać?</title><link>https://blog.prokulski.science/2017/08/30/jak-nauczyc-sie-r-co-czytac/</link><pubDate>Wed, 30 Aug 2017 14:09:36 +0000</pubDate><guid>https://blog.prokulski.science/2017/08/30/jak-nauczyc-sie-r-co-czytac/</guid><description>&lt;p&gt;W listach pytacie o źródła wiedzy dotyczącej R. Dzisiaj kilka linków.&#10;Na początek agregaty, które mogą okazać się wystarczające:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://www.r-bloggers.com/"&gt;R Bloggers&lt;/a&gt; - platforma zbierająca treści z wielu blogów&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://blog.revolutionanalytics.com/"&gt;Revolution Analytics&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://www.datasciencecentral.com/profiles/blog/list"&gt;Data Science Central&lt;/a&gt; - platforma blogowa dla dłubiących w BigData&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Warto śledzić też blogi poszczególnych osób:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://juliasilge.com/"&gt;Julia Silge&lt;/a&gt; to współautorka pakietu &lt;em&gt;tidytext&lt;/em&gt; (i jednocześnie data scientist w Stack Overflow)&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://varianceexplained.org/"&gt;Variance Explained&lt;/a&gt; - blog drugiego współautora &lt;em&gt;tidytext&lt;/em&gt;&lt;/li&gt;&#10;&lt;li&gt;blog &lt;a href="http://www.masalmon.eu/"&gt;Maëlle Salmon&lt;/a&gt;, który kiedyś dodałem do RSSów (trafiłem pewnie w poszukiwaniach czegoś konkretnego albo z r-bloggers)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Jednym z lepszych miejsc jest cała domena związana z RStudio i poszczególne jej subdomeny, przede wszystkim &lt;a href="https://blog.rstudio.com/"&gt;blog RStudio&lt;/a&gt; oraz &lt;a href="https://rviews.rstudio.com/"&gt;RViews&lt;/a&gt;. W ramach RStudio znajdziecie też dużo informacji o poszczególnych pakietach - strona zbiorcza jest &lt;a href="https://www.rstudio.com/products/rpackages/"&gt;tutaj&lt;/a&gt;.&#10;Z polskich blogów szczególnie polecam dwa:&lt;/p&gt;</description></item><item><title>Lista Przebojów Trójki</title><link>https://blog.prokulski.science/2017/08/25/lista-przebojow-trojki/</link><pubDate>Fri, 25 Aug 2017 22:05:45 +0000</pubDate><guid>https://blog.prokulski.science/2017/08/25/lista-przebojow-trojki/</guid><description>&lt;p&gt;Lista Przebojów Trójki to chyba najpopularniejsza lista przebojów w Polsce, a z pewnością najstarsza. Zobaczmy czego możemy się dowiedzieć z całej jej historii.&#10;Potrzebne będzie kilka pakietów R (do pobrania danych dodatkowo &lt;em&gt;rvest&lt;/em&gt;):&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tidyverse&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;lubridate&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;ggrepel&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;# dla ładnego umiejscowienia labelek na wykresach&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="pobranie-danych"&gt;Pobranie danych&lt;/h2&gt;&#10;&lt;p&gt;Skorzystamy z archiwum Listy Trójki zebranym na stronie &lt;a href="http://www.lp3.pl/"&gt;LP3.pl&lt;/a&gt; - klikając w kolejne numery notowań po prawej stronie widzimy, że zmienia się adres strony według schematu &lt;a href="http://www.lp3.pl/alpt.phtml?m=1&amp;amp;nn=XXX"&gt;http://www.lp3.pl/alpt.phtml?m=1&amp;amp;nn=XXX&lt;/a&gt; gdzie &lt;em&gt;XXX&lt;/em&gt; to kolejny numer (niekoniecznie notowania). Trzeba znaleźć największy numer (najnowsze notowanie) i przejść przez kolejne strony (kolejne &lt;em&gt;XXX&lt;/em&gt; od jeden do tej największej liczby).&#10;Analiza kodu HTML strony pozwala na wybranie odpowiednich jej fragmentów i tym samym zgromadzenie danych. Szczegółowym kodem nie będę zamęczał - znajduje się na &lt;a href="https://github.com/prokulski/LP3/blob/master/get_lp3_data.R"&gt;GitHubie&lt;/a&gt;. Pojawiają się pytania od Was jak &lt;em&gt;scrappować&lt;/em&gt; strony - być może przygotuję o tym kiedyś dedykowany wpis techniczny (choć wolę przygotowywać analizy :). Dane zapisałem w pliku lokalnym.&#10;Swoją drogą na &lt;a href="http://www.lp3.pl/"&gt;LP3.pl&lt;/a&gt; znajdziecie część z poniższych analiz.&lt;/p&gt;</description></item><item><title>Zmiany temperatury w czasie - animowany wykres kołowy</title><link>https://blog.prokulski.science/2017/08/10/animowany-wykres-kolowy/</link><pubDate>Thu, 10 Aug 2017 08:12:44 +0000</pubDate><guid>https://blog.prokulski.science/2017/08/10/animowany-wykres-kolowy/</guid><description>&lt;p&gt;Kilka dni temu karierę na stronach poświęconych wizualizacji danych robił filmik obrazujący zmiany temperatury na przestrzeni lat. Na stronie &lt;a href="http://fb.com/DaneAnalizy"&gt;Dane i Analizy&lt;/a&gt; obiecałem, że opiszę jak można coś takiego zrobić.&#10;Wspomniany filmik to&lt;/p&gt;&#10;&lt;p&gt;Jakiś czas zastanawiałem się jakie dane pokazać i zdecydowałem, że będzie to liczba odsłon najpopularniejszych tekstów z bloga który czytasz. Przy okazji dowiemy się jak za pomocą R dostać się do statystyk zebranych w Google Analitycs.&#10;Oczywiście jest do tego stosowny pakiet, ale wcześniej potrzebna jest pewna konfiguracja konta googlowego. Jak zwykle w przypadku API potrzebny jest klucz - w tym przypadku jest to para &lt;em&gt;Client ID&lt;/em&gt; i &lt;em&gt;Secret ID&lt;/em&gt;. Aby je uzyskać wystarczy wykonać kroki opisane chociażby &lt;a href="https://github.com/LucyMcGowan/Tutorials/blob/master/googleanalytics.Rmd"&gt;tutaj&lt;/a&gt;.&#10;Dodatkowo instalujemy pakiet &lt;strong&gt;RGoogleAnalytics&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>Analiza koszykowa - przepisy kulinarne</title><link>https://blog.prokulski.science/2017/08/03/analiza-koszykowa/</link><pubDate>Thu, 03 Aug 2017 14:00:14 +0000</pubDate><guid>https://blog.prokulski.science/2017/08/03/analiza-koszykowa/</guid><description>&lt;p&gt;Dzisiaj zajmiemy się zagadnieniem zwanym &lt;a href="https://pl.wikipedia.org/wiki/Analiza_koszykowa"&gt;analizą koszykową&lt;/a&gt;, która jest jednym z podstawowych narzędzi do badania preferencji zakupowych klientów. Na podstawie wyników można odpowiednio ułożyć produkty w sklepie albo przygotować promocje. Można również przygotować algorytm rekomendacji (“klienci, którzy kupili X kupili też Y”).&#10;Zobaczymy też, że polska kuchnia cebulą stoi. I pieprzem.&#10;Do analizy koszykowej w R wykorzystamy pakiet &lt;strong&gt;arules&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tidyverse&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;stringr&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;reshape2&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;arules&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;arulesViz&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="teoria"&gt;Teoria&lt;/h2&gt;&#10;&lt;p&gt;Przed przystąpieniem do analizy potrzebujemy trochę teorii. Wcześniejsze wpisy mówiły o zagadnieniach dość intuicyjnych, ale analiza koszyków wymaga wprowadzenia kilku pojęć.&#10;Ale jeśli nie interesuje Cię teoria, jakieś wskaźniki i całe to programowanie to możesz od razu przeskoczyć do analizy przepisów klikając &lt;strong&gt;&lt;a href="#analiza-przepisow"&gt;tutaj&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Taksówką po Nowym Jorku - konkurs Kaggle.com</title><link>https://blog.prokulski.science/2017/07/28/taksowki-w-nowym-jorku/</link><pubDate>Fri, 28 Jul 2017 21:01:32 +0000</pubDate><guid>https://blog.prokulski.science/2017/07/28/taksowki-w-nowym-jorku/</guid><description>&lt;p&gt;Jest sobie taka strona - Kaggle.com - na której badacze danych mogą próbować swoich sił w różnych konkursach. Najczęściej chodzi o to, żeby z opublikowanych danych treningowych przewidzieć wyniki dla danych testowych.&#10;Tak jest w przypadku konkursu &lt;a href="https://www.kaggle.com/c/nyc-taxi-trip-duration"&gt;NYC Taxi Trip Durration&lt;/a&gt; w którym uczestniczę. Chodzi pokrótce o to, żeby na podstawie informacji o kursach taksówek przewidzieć czas trwania podróży. Do dyspozycji mamy dane z pierwszego półrocza 2016 roku - prawie półtora miliona wierszy. Jeśli chcesz spróbować swoich sił albo po prostu sprawdzić opublikowany niżej kod - ściągnij dane ze strony konkursu (do tego wpisu wystarczy plik &lt;em&gt;train.csv&lt;/em&gt;).&#10;W tym poście nie pokażę rozwiązania i nie zbuduję modelu (można &lt;a href="https://www.kaggle.com/c/nyc-taxi-trip-duration/kernels"&gt;kilka zobaczyć&lt;/a&gt; na stronie konkursu, &lt;strong&gt;&lt;a href="https://www.kaggle.com/c/nyc-taxi-trip-duration/kernels?userId=752132"&gt;moje też&lt;/a&gt;&lt;/strong&gt;), ale przejdziemy przez cały proces analizy danych, odpowiedniego ich czyszczenia (w nieco skróconej formie) i szukania ukrytych w nich informacji. &lt;strong&gt;Wpis raczej mało popularnonaukowy&lt;/strong&gt;, ale może interesuje Cię gdzie nowojorczycy jeżdżą taksówkami?&#10;Potrzebujemy tylko kilku pakietów, z czego większość dla jednej czy dwóch funkcji.&lt;/p&gt;</description></item><item><title>The Rolling Stones Tour</title><link>https://blog.prokulski.science/2017/07/25/the-rolling-stones-tour/</link><pubDate>Tue, 25 Jul 2017 10:39:50 +0000</pubDate><guid>https://blog.prokulski.science/2017/07/25/the-rolling-stones-tour/</guid><description>&lt;p&gt;&lt;em&gt;Po wolnej musi być szybka, takie są zasady muzykowania&lt;/em&gt; pada na koncertowej płycie &lt;strong&gt;Bolilol Tour&lt;/strong&gt; zespołu Illusion. Sprawdźmy czy tak jest na koncertach…&#10;…ale nie dokładnie to sprawdzimy. Inspiracją dla niniejszego postu jest wpis z 2011 roku o &lt;a href="http://cilekagaci.com/2011/11/30/metallica-on-stage/"&gt;utworach granych przez Metallicę na koncertach&lt;/a&gt;, szczególnie infografika, o której ów wpis jest. Infografika przedstawia popularność piosenek granych na koncertach.&#10;&lt;strong&gt;Skoro ktoś mógł to zrobić, to dlaczego nie ja?&lt;/strong&gt; Instrukcja jak zrobić to samo poniżej.&#10;Za źródło danych posłuży serwis &lt;a href="http://setlist.fm"&gt;Setlist.fm&lt;/a&gt;, w którym znaleźć można całą masę informacji o koncertach - przede wszystkim datę, miejsce i to co najbardziej interesująca - lista utworów. Dane pobierać będziemy przez API, do którego potrzebny jest klucz. Po założeniu konta w serwisie możemy sobie taki wygenerować. Z API rozmawiamy JSONem - dlatego poniżej biblioteka &lt;em&gt;jsonlite&lt;/em&gt; oraz &lt;em&gt;RCurl&lt;/em&gt; do odpytywania tegoż API.&lt;/p&gt;</description></item><item><title>Popularność literek w polskich słowach</title><link>https://blog.prokulski.science/2017/07/18/literaki/</link><pubDate>Tue, 18 Jul 2017 13:43:25 +0000</pubDate><guid>https://blog.prokulski.science/2017/07/18/literaki/</guid><description>&lt;p&gt;Zainspirowany &lt;a href="http://www.prooffreader.com/2014/05/graphing-distribution-of-english.html"&gt;grafiką&lt;/a&gt; obrazującą rozkład położenia liter w słowach (angielskich) znalezioną na reddicie postanowiłem sprawdzić jak to samo wygląda w języku polskim.&#10;Aby sprawdzić na których miejscach w słowach występują poszczególne litery alfabetu potrzebujemy przede wszystkim słów. Bo alfabet znamy. Skąd wziąć słowa? Ze słownika, ktoś powie. Oczywiście to najlepsze miejsce - w słownikach są słowa, po to właśnie są słowniki. Ale słowniki mają jedną wadę - zawierają podstawowe formy słów (rzeczowniki w mianowniku, czasowniki w bezokoliczniku), co znacząco ogranicza liczbę dostępnych słów. A język polski jest bardzo bogaty w różne formy fleksyjne. Spróbujcie wymienić wszystkie możliwe wariacje na temat jakiegoś czasownika - najwięcej zabawy i rubasznego śmiechu będzie przy wulgaryzmach. Do każdego właściwie można dodać na początek &lt;em&gt;wy-&lt;/em&gt;, &lt;em&gt;przy-&lt;/em&gt;, &lt;em&gt;za-&lt;/em&gt;, &lt;em&gt;pod-&lt;/em&gt;, &lt;em&gt;s-&lt;/em&gt;, &lt;em&gt;roz-&lt;/em&gt;. Można dodać też &lt;em&gt;się&lt;/em&gt;. Można odmienić czasownik przez osoby i liczby. Podobnie z rzeczownikami, przymiotnikami i innymi częściami mowy. Wystarczy spojrzeć na pierwszy z brzegu &lt;a href="http://katarzynanowak.studiomoff.pl/bogactwo-polszyczny-pierdolic/"&gt;link&lt;/a&gt; znaleziony w Google.&#10;I właśnie na taki worek słów (bardzo lubię angielskie określenie &lt;em&gt;bag of words&lt;/em&gt;) się nastawimy. Bo im więcej kombinacji tym bliższe życiu wyniki użycia literek.&#10;Dlatego nie skorzystamy ze słownika, a z gotowych tekstów - w tym przypadku z ośmiu książek, które już analizowaliśmy w odcinku poświęconym &lt;strong&gt;&lt;a href="../../2017/06/30/kto-napisal-te-ksiazke/"&gt;sprawie kryminalnej poszukiwania autora&lt;/a&gt;&lt;/strong&gt;. Im więcej tekstów, najlepiej różnych autorów i z różnych dziedzin, tym większy zbiór słów. W poszukiwaniu danych do dzisiejszego postu natrafiłem na stronę PWN o &lt;a href="https://sjp.pwn.pl/korpus"&gt;korpusie języka polskiego&lt;/a&gt; - mowa tam o stu milionach słów! Na pewno z uwzględnioną fleksją, bo słów w naszym języku jest zapewne mniej (w formach podstawowych).&#10;Ale nie mamy tych 100 milionów słów, musimy polegać na tym co mamy.&#10;Zaczniemy od potrzebnych pakietów:&lt;/p&gt;</description></item><item><title>Kto napisał tę książkę?</title><link>https://blog.prokulski.science/2017/06/30/kto-napisal-te-ksiazke/</link><pubDate>Fri, 30 Jun 2017 12:36:46 +0000</pubDate><guid>https://blog.prokulski.science/2017/06/30/kto-napisal-te-ksiazke/</guid><description>&lt;p&gt;Czy da się rozpoznać kto jest autorem książki na podstawie jej treści? Są tacy badacze, którzy to robią (i na przykład podważają autorstwo niektórych dramatów Szekspira), my zrobimy to samo z kryminałami (bo jest to takie zadanie śledcze).&lt;/p&gt;&#10;&lt;p&gt;Na warsztat weźmiemy dwóch poczytnych polskich autorów, tak żebyście mieli szansę sprawdzić czy to co wychodzi jest zgodne z tym co znacie z książek. Oczywiście czytaliście je, prawda?&#10;Mowa o Zygmuncie Miłoszewskim i jego trylogii o Teodorze Szackim oraz Remigiuszu Mrozie i jego trzech książkach o Joannie Chyłce. Do tego dorzucimy dwie książki - “Bezcennego” oraz “Enklawę”. Udamy, że nie wiemy kto je napisał. Żeby było trudniej - “Enklawa” podpisana jest przez Ove Løgmansbø, ale nawet sam Mróz &lt;a href="http://remigiuszmroz.pl/ove-logmansbo/"&gt;na swojej stronie przyznaje się&lt;/a&gt;, że to jego pseudonim, zaś “Bezcenny” nie jest o Szackim.&#10;Żeby było jeszcze zabawniej - ja (jeszcze, czeka właśnie w kolejce) nie czytałem żadnej książki Remigiusza Mroza, więc nie wiem o czym i o kim są (ta Chyłka to wynik tego co poniżej).&#10;Czego potrzebujemy? Oczywiście tekstów książek. Powinny być w plikach tekstowych. Najprościej przenieść je do takiego formatu z plików &lt;strong&gt;.mobi&lt;/strong&gt; przy pomocy oprogramowania &lt;strong&gt;&lt;a href="https://calibre-ebook.com/"&gt;Calibre&lt;/a&gt;&lt;/strong&gt; - wczytujemy MOBI i konwertujemy na TXT.&#10;Wszystkie pliki TXT nazwałem odpowiednio i umieściłem w jednym folderze. Kilka operacji i wczytujemy wszystko do jednej dużej tabeli, w której kolumny to: autor książki, jej tytuł i w kolejne wiersze tekstu.&lt;/p&gt;</description></item><item><title>Lubimy czytać - coś o książkach</title><link>https://blog.prokulski.science/2017/06/28/lubimy-czytac/</link><pubDate>Wed, 28 Jun 2017 13:49:14 +0000</pubDate><guid>https://blog.prokulski.science/2017/06/28/lubimy-czytac/</guid><description>&lt;p&gt;Jakiś czas temu była &lt;a href="../../2017/06/08/oceny-filmow-i-ich-przewidywanie/"&gt;analiza ocen filmów&lt;/a&gt; (na podstawie bazy Filmwebu), obiecałem w różnych miejscach, że będzie też o książkach. Zatem sprawdźmy czego możemy się dowiedzieć z danych pobranych z serwisu &lt;a href="http://lubimyczytac.pl/"&gt;LubimyCzytać.pl&lt;/a&gt;.&#10;Przez kilka tygodni skrypt działający sobie grzecznie na serwerze pobierał stronę po stronie z serwisu, analizował zapisane na niej dane i przepisywał je sobie do lokalnego pliku (dane zgromadziłem w pliku &lt;em&gt;books_total.RDS&lt;/em&gt;, z którego za chwilę je wczytamy).&#10;I tutaj ciekawostka. Poprosiłem redakcję serwisu o przesłane danych, tak aby nie zapychać im serwerów. Poprosiłem jednocześnie zaznaczając, że chcę przygotować niniejszą analizę, a jeśli nie otrzymam danych - pobiorę je samodzielnie. Odmówiono mi. Żeby być miłym oszczędziłem serwery (swoje i cudze) i przed kolejnymi &lt;em&gt;hitami&lt;/em&gt; w stronę czekałem losową liczbę sekund (od 1 do 3). Warto to robić, &lt;strong&gt;warto być przyzwoitym&lt;/strong&gt;. Ale mimo wszystko nie udało się pobrać wszystkich danych (a ileż możecie czekać na nowy post?). Tak czy inaczej - mamy ponad 330 tysięcy wierszy.&#10;Wiersze zawierają informację o tytule książki, jej autora, wydawnictwo, datę wydania (skorzystamy tylko z roku), liczbie stron i kategorii do której dana książka została przypisana w serwisie. Dodatkowo - to co najbardziej ciekawe - mamy średnią ocenę, liczbę ocen oraz liczbę każdej z ocen przyznanych przez użytkownika (od 1 do 10 &lt;em&gt;gwiazdek&lt;/em&gt;). Gdzieś jest też znacznik w jakim języku jest książka. Fajne dane, można sobie porobić różne przekroje. I tak zrobimy.&#10;Zaczynamy oczywiście od przygotowania środowiska - wczytanie pakietów i danych:&lt;/p&gt;</description></item><item><title>Maszynka do czytania Twittera</title><link>https://blog.prokulski.science/2017/06/20/maszynka-do-czytania-twittera/</link><pubDate>Tue, 20 Jun 2017 12:57:10 +0000</pubDate><guid>https://blog.prokulski.science/2017/06/20/maszynka-do-czytania-twittera/</guid><description>&lt;p&gt;Bardzo lubię Twittera, który w Polsce jest trochę niedowartościowany. Według mnie to najszybsze źródło informacji, a przy okazji - przyjemne i wygodne w zdobywaniu danych do przeróżnych analiz.&#10;Najnowsze dane do jakich dotarłem (nie szukałem długo - jakieś 2 minuty) mówią o tym, że w Polsce z FB korzysta jakieś pięć razy więcej użytkowników niż z Twittera. Niby mało, ale jak zobaczymy jest to wystarczająco.&#10;&lt;a href="../../tags/twitter/"&gt;Analizowaliśmy już&lt;/a&gt; w oparciu o dane z Twittera &lt;a href="../../2017/02/27/oscary-2017-kto-wygral-bez-czytania-wiadomosci/"&gt;wyniki Oscarów&lt;/a&gt; oraz &lt;a href="../../2017/06/12/mecz-polska-rumunia-na-twitterze/"&gt;aktywność podczas meczu piłki nożnej&lt;/a&gt;. Nie ma jednak prostego sposobu (nie znam, może raczej tak), aby w krótkim czasie dotrzeć to tego co aktualnie dzieje się na Twitterze. &lt;strong&gt;Przygotujemy sobie więc odpowiednie narzędzie.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Mecz Polska - Rumunia na Twitterze</title><link>https://blog.prokulski.science/2017/06/12/mecz-polska-rumunia-na-twitterze/</link><pubDate>Mon, 12 Jun 2017 11:00:36 +0000</pubDate><guid>https://blog.prokulski.science/2017/06/12/mecz-polska-rumunia-na-twitterze/</guid><description>&lt;p&gt;Wydarzenia sportowe (lub inne dziejące się tu i teraz) są bardzo wdzięcznym tematem analizy tego, co dzieje się w mediach społecznościowych. Jak wyglądał Twitter podczas meczu Polska - Rumunia?&lt;/p&gt;&#10;&lt;h3 id="przygotowanie-tokenu"&gt;Przygotowanie tokenu&lt;/h3&gt;&#10;&lt;p&gt;Aby zebrać dane z Twittera potrzebujemy zbudować aplikację, która wykorzysta API Twittera i jej tokenu. W samym R wykorzystamy pakiet &lt;strong&gt;&lt;a href="https://github.com/mkearney/rtweet"&gt;rtweet&lt;/a&gt;&lt;/strong&gt;. Koniec końców potrzebny nam jest klucz API (para &lt;em&gt;Consumer Key&lt;/em&gt; i &lt;em&gt;Consumer Sectet&lt;/em&gt;) - jak je zdobyć można przeczytać &lt;strong&gt;&lt;a href="https://mkearney.github.io/rtweet/articles/auth.html"&gt;tutaj&lt;/a&gt;&lt;/strong&gt; (z obrazkami). Odpowiednie wartości należy przypisać do zmiennych poniżej. Kod przygotuje nam token i zapisze w lokalnym pliku, dzięki temu w przyszłości będziemy mogli taki token wykorzystać:&lt;/p&gt;</description></item><item><title>Przewidywanie oceny filmu - wybór modelu</title><link>https://blog.prokulski.science/2017/06/09/przewidywanie-oceny-filmu-wybor-modelu/</link><pubDate>Fri, 09 Jun 2017 15:29:42 +0000</pubDate><guid>https://blog.prokulski.science/2017/06/09/przewidywanie-oceny-filmu-wybor-modelu/</guid><description>&lt;p&gt;Jak będzie oceniony film, który dopiero powstaje? Czyli o wybieraniu i poprawianiu modeli predykcyjnych.&#10;W poprzednim wpisie &lt;a href="../../2017/06/08/oceny-filmow-i-ich-przewidywanie/"&gt;pokazałem dane zgromadzone z Filmwebu w różnych przekrojach&lt;/a&gt;, a na koniec zaproponowałem model, który na podstawie informacji o ocenach filmów twórców (reżyseria, scenariusz, autorzy muzyki oraz zdjęć) i aktorów próbuje przewidzieć ocenę nowego filmu (wyprodukowanego w tym samym składzie). Nurtował mnie ten pomysł, postanowiłem go więc nieco lepiej przeanalizować. A przy okazji - nauczyć się budować modele predykcyjne (chociaż o nich trochę już wiem - był &lt;a href="../../2017/03/07/kola-w-zbozu/"&gt;wpis o klasyfikacji&lt;/a&gt;).&#10;Jeśli nie znasz poprzedniego wpisu - zachęcam do lektury! &lt;strong&gt;&lt;a href="../../2017/06/08/oceny-filmow-i-ich-przewidywanie/"&gt;klik, klik&lt;/a&gt;&lt;/strong&gt;&#10;Na początek przygotujemy środowisko, wczytamy zgromadzone dane i ustalimy jaka jest minimalna liczba głosów na film, żeby w ogóle się nim zajmować.&lt;/p&gt;</description></item><item><title>Oceny filmów i ich przewidywanie</title><link>https://blog.prokulski.science/2017/06/08/oceny-filmow-i-ich-przewidywanie/</link><pubDate>Thu, 08 Jun 2017 13:59:55 +0000</pubDate><guid>https://blog.prokulski.science/2017/06/08/oceny-filmow-i-ich-przewidywanie/</guid><description>&lt;p&gt;Od czego zależą oceny filmów?&#10;Jak będzie oceniony film, który dopiero powstaje?&#10;Dawno temu, czyli gdzieś około roku, może nawet półtora temu, zebrałem z Filmwebu prawie całą ówczesną bazę danych o filmach. Wykorzystałem &lt;a href="https://github.com/nSolutionsPL/filmweb-api"&gt;biblioteki napisane w PHP&lt;/a&gt; korzystające z (nie)oficjalnego API Filmwebu budując skrypt, który dla kolejnych ID “produktów” (produktów, bo Filmweb ma nie tylko filmy, ale również seriale i gry) i pobierał odpowiednie informacje (do ID bodaj 770 tys.): rok produkcji filmu, jego polski i oryginalny tytuł, czas trwania, gatunki, twórców i obsadę oraz liczbę ocen i średnią ocenę (na moment pobrania danych). Powstało kilka plików CSV (pliki relacyjne) z dużą ilością danych. Dzisiaj z tego skorzystamy i pooglądamy jak zmieniał się przemysł filmowy.&#10;Pliki zgromadzone zostały w formie CSV, po wyczyszczeniu danych wpakowałem wszystko w jeden plik z danymi. Wczytajmy sobie te dane:&lt;/p&gt;</description></item><item><title>Tramwajem po grafie</title><link>https://blog.prokulski.science/2017/05/17/tramwajem-po-grafie/</link><pubDate>Wed, 17 May 2017 15:09:13 +0000</pubDate><guid>https://blog.prokulski.science/2017/05/17/tramwajem-po-grafie/</guid><description>&lt;p&gt;Dzisiaj trochę o grafach. Po drodze na nie się powoływałem, czasem nawet jakieś można było zobaczyć.&#10;Ale co to są te grafy? Był &lt;a href="../../2017/03/07/kola-w-zbozu/"&gt;wpis “edukacyjny” o metodach klasyfikacji&lt;/a&gt;, czas na kolejny.&#10;&lt;a href="https://pl.wikipedia.org/wiki/Graf_(matematyka)"&gt;Grafy to stwory matematyczne&lt;/a&gt;, które przydatne są na przykład w analizie sieci społecznych (wykrywanie “grup wzajemnej adoracji” albo ważnych osób wokół których skupiają się inni), logistyce (planowanie tras transportu). My zajmiemy się warszawskimi tramwajami. Bo to sieć, jakby nie było.&#10;Dane o trasach pobrałem ze &lt;a href="http://warszawa.wikia.com/wiki/Kategoria:Linie_tramwajowe"&gt;strony Warszawa.wikia.com&lt;/a&gt; ręcznie przepisując (Ctrl-C + Ctrl-V plus trochę Ctrl-H oraz &lt;em&gt;USUŃ.ZBĘDNE.ODSTĘPY()&lt;/em&gt; w Excelu) do tabeli, w której w pierwszej kolumnie jest numer linii, a w drugiej - kolejne przystanki na tej linii (ich nazwy).&lt;/p&gt;</description></item><item><title>Rowery Veturilo - część druga</title><link>https://blog.prokulski.science/2017/05/12/rowery-veturilo-ii/</link><pubDate>Fri, 12 May 2017 13:49:07 +0000</pubDate><guid>https://blog.prokulski.science/2017/05/12/rowery-veturilo-ii/</guid><description>&lt;p&gt;Jakimi trasami poruszają się rowery Veturilo?&#10;Czy ludzie dojeżdżają rowerem do metra?&#10;Jak szybko jeżdżą rowery?&#10;Czy to od czegoś zależy?&#10;W &lt;a href="../../2017/05/08/rowery-veturilo-i/"&gt;pierwszej części&lt;/a&gt; opisałem skąd pobrać dane, pokazałem jak wygląda liczba rowerów Veturilo poruszających się po Warszawie (w ciągu dwóch miesięcy, ale także średnio w poszczególnych dniach tygodnia). Zderzyliśmy dane o ruchu rowerowym z pogodą, co w efekcie pozwoliło dojść do wniosku (chyba mało zaskakującego), że jak jest cieplej i nie pada to jeździmy więcej.&#10;&lt;strong&gt;Dzisiaj będzie o tym skąd i dokąd jeżdżą sobie rowery&lt;/strong&gt;&#10;Sprawdzimy też czy teza postawiona w poprzedniej części (na podstawie ruchu w poszczególnych porach dnia) o dojazdach do i z pracy jest prawdziwa. A przynajmniej zbliżymy się do jej weryfikacji.&#10;Zaczniemy od podłączenia się do źródła danych:&lt;/p&gt;</description></item><item><title>Rowery Veturilo - część pierwsza</title><link>https://blog.prokulski.science/2017/05/08/rowery-veturilo-i/</link><pubDate>Mon, 08 May 2017 15:54:27 +0000</pubDate><guid>https://blog.prokulski.science/2017/05/08/rowery-veturilo-i/</guid><description>&lt;p&gt;Czy popularność rowerów Veturilo w Warszawie od czegoś zależy?&#10;Dzisiaj, po majowej przerwie (spędzonej między innymi na rowerze) zajmiemy się nieco większymi zbiorami danych.&#10;Na początek kilka słów o przygotowaniu danych.&lt;/p&gt;&#10;&lt;h3 id="rowery-veturilo"&gt;Rowery Veturilo&lt;/h3&gt;&#10;&lt;p&gt;Od początku marca (od bodaj 11) zbierałem dane wystawione przez NextBike (operatora rowerów m.in. Veturilo) dla kilkudziesięciu miast. Ograniczyłem się tylko do Warszawy, dane były pobierane co 5 minut. Jak wyglądają te dane możecie sprawdzić sami - to &lt;a href="http://nextbike.net/maps/nextbike-official.xml?city=210"&gt;dostępny online plik XML&lt;/a&gt;. W pliku znaleźć można wszystkie potrzebne nam informacje:&lt;/p&gt;</description></item><item><title>Nowe pojazdy w Polsce po roku 2010</title><link>https://blog.prokulski.science/2017/04/29/nowe-pojazdy-w-polsce-po-roku-2010/</link><pubDate>Sat, 29 Apr 2017 09:57:58 +0000</pubDate><guid>https://blog.prokulski.science/2017/04/29/nowe-pojazdy-w-polsce-po-roku-2010/</guid><description>&lt;p&gt;Gdzie rejestruje się najwięcej nowych samochodów?&#10;&lt;strong&gt;Jak to porównywać i pokazywać?&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Dzisiaj proste zadanie, ale wymagające nieco gimnastyki. Otóż sprawdzimy gdzie przybywa najwięcej nowych samochodów. Skorzystamy z danych &lt;a href="https://bdl.stat.gov.pl/BDL/dane/podgrup/temat"&gt;GUSu&lt;/a&gt; (precyzyjniej jest to Kategoria: TRANSPORT I ŁĄCZNOŚĆ, Grupa: POJAZDY, Podgrupa: Zarejestrowane nowe pojazdy samochodowe (dane kwartalne)).&#10;Pobieramy ręcznie plik CSV (dane dla wszystkich okresów i wszystkich lat, tylko samochody osobowe), pamiętając żeby przed pobraniem pliku przełączyć układ danych na “według TERYT” (klucz TERYT jest najlepszy do łączenia danych z mapami - pobranymi w plikach SHP z &lt;a href="http://www.codgik.gov.pl/index.php/darmowe-dane/prg.html"&gt;CODGiK&lt;/a&gt; - zdaje się, że &lt;a href="../../2017/03/30/szybka-mapka-z-miastami/"&gt;było już o tym&lt;/a&gt;).&lt;/p&gt;</description></item><item><title>Prognoza stopy bezrobocia na 2017-2018</title><link>https://blog.prokulski.science/2017/04/26/prognoza-stopy-bezrobocia-na-2017-2018/</link><pubDate>Wed, 26 Apr 2017 12:28:23 +0000</pubDate><guid>https://blog.prokulski.science/2017/04/26/prognoza-stopy-bezrobocia-na-2017-2018/</guid><description>&lt;p&gt;Jakie będzie bezrobocie za dwa lata?&#10;A właściwie - jak wyznaczyć przyszłe dane na podstawie historii?&#10;Dzisiaj zajmiemy się prostą (automatyczną) predykcją szeregów czasowych.&#10;Co to jest &lt;strong&gt;szereg czasowy&lt;/strong&gt;? Ano, zbiór danych przypisanych do kolejnych dat (chwil w czasie - będąc bardziej precyzyjnym). Może to być wartość akcji dzień po dniu, może to być temperatura (czy dowolne inne wartości opisujące pogodę) lub cokolwiek innego, co ma swoje wartości w kolejnych momentach czasu. My zajmiemy się stopą bezrobocia w Polsce.&#10;Skorzystamy z miesięcznych danych &lt;a href="http://stat.gov.pl/obszary-tematyczne/rynek-pracy/bezrobocie-rejestrowane/stopa-bezrobocia-w-latach-1990-2017,4,1.html"&gt;publikowanych przez GUS&lt;/a&gt;. Dane są w ładnej tabelce na stronie, można więc je łatwo z niej wyciągnąć.&lt;/p&gt;</description></item><item><title>Sejm VII kadencji</title><link>https://blog.prokulski.science/2017/04/22/sejm-vii-kadencji/</link><pubDate>Sat, 22 Apr 2017 14:19:27 +0000</pubDate><guid>https://blog.prokulski.science/2017/04/22/sejm-vii-kadencji/</guid><description>&lt;p&gt;Jak znaleźć posłów do przejęcia z jednego klubu do drugiego?&#10;Czy posłowie głosują zgodnie z głosem lidera?&#10;Sprawdzimy dzisiaj jak wygląda rozkład sił w polskim Sejmie. Jak bardzo partie różnią się od siebie, komu z kim po drodze i czy są posłowie, którzy głosują inaczej niż lider?&#10;Wszystkie te informacje wydobędziemy moim ulubionym sposobem, czyli bez czytania. A tak na prawdę to bez wnikania w politykę, bez oglądania wiadomości. Jedynie na podstawie tego jak poszczególne osoby głosują w kolejnych głosowaniach.&#10;&lt;strong&gt;Jeśli nie interesują Cię technikalia - przejdź od razu do wyników&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>Nowa Europa (według k-means)</title><link>https://blog.prokulski.science/2017/04/19/nowa-europa-wedlug-k-means/</link><pubDate>Wed, 19 Apr 2017 13:53:09 +0000</pubDate><guid>https://blog.prokulski.science/2017/04/19/nowa-europa-wedlug-k-means/</guid><description>&lt;p&gt;Czy granice państw europejskich są wyznaczone poprawnie?&#10;Jak wyglądałyby gdyby użyć algorytmów?&lt;/p&gt;&#10;&lt;p&gt;Tak zrobimy - sprawdzimy jak algorytm k-średnich “rozdzieli” na poszczególne kraje miasta biorąc pod uwagę ich położenie geograficzne. I zobaczymy co się stanie jak w Europie będzie mniej państw (oczywiście hipotetycznie, oczywiście na podstawie algorytmu, a nie wojny o ziemię).&#10;Trochę o algorytmach &lt;a href="../../2017/03/07/kola-w-zbozu/"&gt;pisałem już wcześniej&lt;/a&gt;, tutaj użyjemy najprostszego z algorytmów - &lt;a href="https://pl.wikipedia.org/wiki/Algorytm_centroid%C3%B3w"&gt;k-średnich&lt;/a&gt;. Metoda będzie prosta - dla każdego miasta znajdziemy jego współrzędne, później na podstawie współrzędnych dokonamy klasyfikacji do nowych grup. Na początek tej samej ilości grup (państw) jaką mamy obecnie - sprawdzimy czy granice są “odpowiednie”. Później będziemy zmniejszać ilość “nowych państw”.&lt;/p&gt;</description></item><item><title>CSI: Lemur</title><link>https://blog.prokulski.science/2017/04/14/csi-lemur/</link><pubDate>Fri, 14 Apr 2017 12:41:04 +0000</pubDate><guid>https://blog.prokulski.science/2017/04/14/csi-lemur/</guid><description>&lt;p&gt;Gdzie mieszkasz? I gdzie pracujesz?&#10;Daj mi dane z Google Takeout i powiem Ci wszystko!&#10;&lt;strong&gt;Google nas śledzi.&lt;/strong&gt; Wie jakie strony oglądamy, jakie filmy. Jeśli używamy Google Maps i mamy włączone śledzenie lokalizacji w telefonie - wie gdzie jesteśmy. I jeszcze do tego zarabia na tym pieniądze.&#10;Ja mam (i wcale się tego nie boję). Dzięki temu za darmo mam dane, którymi mogę się pobawić, a co więcej - wiem dlaczego te dane są takie a nie inne, rozumiem je najlepiej jak tylko się da. Bo to moje życie.&#10;Ale gdyby tak ktoś chciał na podstawie tylko jednej porcji danych (tych o lokalizacji) dowiedzieć się czegoś o nas… co może zobaczyć? W bardzo prosty sposób bardzo dużo. Odsłonię trochę siebie.&#10;Na początek potrzebujemy pliku JSON z historią lokalizacji. Wchodzimy na &lt;a href="https://takeout.google.com/settings/takeout"&gt;Google Takeout&lt;/a&gt; i zlecamy przygotowanie danych zaznaczając &lt;strong&gt;Location History&lt;/strong&gt; w formacie JSON. Po jakimś czasie (do kilkudziesięciu minut) dane trafią we wskazane w kolejnych krokach miejsce.&#10;Teraz bierzemy je na wa&lt;strong&gt;R&lt;/strong&gt;sztat.&lt;/p&gt;</description></item><item><title>Ceny mieszkań do wynajęcia</title><link>https://blog.prokulski.science/2017/04/06/mieszkanie-do-wynajecia/</link><pubDate>Thu, 06 Apr 2017 15:43:37 +0000</pubDate><guid>https://blog.prokulski.science/2017/04/06/mieszkanie-do-wynajecia/</guid><description>&lt;p&gt;Znacie to nagranie?&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;No, ja mam M1 do wynajęcia…&lt;/li&gt;&#10;&lt;li&gt;To już nie jest aktualne, wie pan?&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Pytanie brzmi &lt;strong&gt;za ile wynająć takie M1&lt;/strong&gt;? Albo &lt;strong&gt;ile zapłacić&lt;/strong&gt;? W zależności od lokalizacji.&lt;/p&gt;&#10;&lt;h3 id="skąd-wziąć-dane"&gt;Skąd wziąć dane?&lt;/h3&gt;&#10;&lt;p&gt;Sprawdzimy jakie są rynkowe ceny najmu mieszkań, korzystając jak zwykle z dostępnych źródeł. Popatrzymy globalnie, na cały kraj. Popatrzymy też statystycznie (bez dużej ingerencji w dane)., a skoro statystycznie to potrzebujemy dużo danych, żeby statystyka miała sens. Tym bardziej że będziemy głównie uśredniać (albo precyzyjniej - opierać się na &lt;a href="https://pl.wikipedia.org/wiki/Mediana"&gt;medianach&lt;/a&gt;, czyli wartościach środkowych).&#10;Skąd weźmiemy dane? Z serwisów ogłoszeniowych. Jest kilka specjalizujących się w nieruchomościach (np. otodom.pl), ale są też inne gdzie przewija się znacznie więcej ogłoszeń - OLX.pl, gumtree.pl czy gratka.pl. Ta ostatnia okazała się najbardziej przydatna. Z prostego powodu - na liście wyników wyszukiwania znajdujemy potrzebne dane (dzięki temu wystarczy przeskanować kolejne strony indeksu zamiast wchodzić na każde ogłoszenie - jest szybciej), ułożone dodatkowo w sensownym HTMLu.&#10;Jeśli chcesz pominąć technikalia - skroluj dalej, albo kliknij sobie tutaj i &lt;strong&gt;&lt;a href="#analiza"&gt;przejdź do analizy&lt;/a&gt;&lt;/strong&gt;, a jeśli interesują Cię &lt;strong&gt;&lt;a href="#ceny-mieszkan-w-warszawie"&gt;ceny mieszkań w Warszawie&lt;/a&gt;&lt;/strong&gt; - to też jest, a nieco dalej &lt;a href="#ceny-mieszkan-w-innych-miastach"&gt;w innych miastach&lt;/a&gt;.&#10;Już możecie się domyślić, że metodą “czołgową” przejedziemy po kolei wszystkie strony i sobie pobierzemy to co nam potrzebne.&#10;Potrzebujemy kilku bibliotek, przy okazji zdefiniujemy “standardowy” wygląd wszystkich wykresów (żeby nie dodawać za każdym razem moje ulubione &lt;em&gt;“+ theme_minimal()”&lt;/em&gt;).&lt;/p&gt;</description></item><item><title>Jak Onet pracuje na Facebooku?</title><link>https://blog.prokulski.science/2017/03/20/jak-onet-pracuje-na-facebooku/</link><pubDate>Mon, 20 Mar 2017 17:08:09 +0000</pubDate><guid>https://blog.prokulski.science/2017/03/20/jak-onet-pracuje-na-facebooku/</guid><description>&lt;p&gt;W poprzednim poście zrobiłem analizę postów publikowanych przez polskie redakcje informacyjne na Facebooku. Zabrakło tam redakcji z grupy Ringier Axel Springer Polska.&#10;W związku z licznymi prośbami - dzisiaj pogłębiona analiza postów Onetu.&#10;Zajmiemy się fanpage’em &lt;a href="https://www.facebook.com/Onet"&gt;“głównym”&lt;/a&gt; i ostatnimi dwoma tysiącami postów.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fb_page_posts &lt;span style="color:#0550ae"&gt;&amp;lt;-&lt;/span&gt; &lt;span style="color:#6639ba"&gt;get_fanpage_posts&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Onet&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2000&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; token&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Skorzystałem z funkcji &lt;strong&gt;get_fanpage_posts()&lt;/strong&gt; napisanej w &lt;a href="../../2017/03/18/redakcje-informacyjne-na-facebooku/"&gt;poprzednim poście&lt;/a&gt;, więc zainteresowanych tam odsyłam po szczegóły techniczne.&#10;Zobaczmy jakiego typu posty publikuje Onet:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fb_page_posts &lt;span style="color:#0550ae"&gt;%&amp;gt;%&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;count&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;type&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;%&amp;gt;%&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;mutate&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;p&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;100&lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt;n&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#6639ba"&gt;sum&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;n&lt;span style="color:#1f2328"&gt;))&lt;/span&gt; &lt;span style="color:#0550ae"&gt;%&amp;gt;%&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;ungroup&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt; &lt;span style="color:#0550ae"&gt;%&amp;gt;%&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;arrange&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;n&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;%&amp;gt;%&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;mutate&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;type &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;factor&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;type&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; levels&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;type&lt;span style="color:#1f2328"&gt;))&lt;/span&gt; &lt;span style="color:#0550ae"&gt;%&amp;gt;%&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;ggplot&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt; &lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;geom_bar&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;aes&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; p&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; fill&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;type&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; stat&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;identity&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;labs&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;fill&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Typ postu&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;theme_void&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt; &lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;coord_polar&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;theta&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;y&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="../../downloads/2017/03/onet_01-1.png" alt=""&gt;&#10;Prawie 77% - linki, 16.75% wideo, 6% zdjęcia.&#10;Jak to wygląda ilościowo - liczba postów publikowanych w ciągu dnia w zależności od dnia tygodnia, im bardziej żółte tym więcej:&lt;/p&gt;</description></item><item><title>Redakcje informacyjne na Facebooku</title><link>https://blog.prokulski.science/2017/03/18/redakcje-informacyjne-na-facebooku/</link><pubDate>Sat, 18 Mar 2017 09:31:57 +0000</pubDate><guid>https://blog.prokulski.science/2017/03/18/redakcje-informacyjne-na-facebooku/</guid><description>&lt;p&gt;Jak pracują redakcje serwisów informacyjnych na Facebooku?&#10;Kiedy publikują, jakiego rodzaju treści? Czy “cała prawda całą dobę” to prawda?&#10;Dobierzemy się do postów publikowanych przez redakcje informacyjne i zobaczymy jak wygląda obraz tych redakcji na Fejsie.&#10;Do tego celu użyjemy biblioteki &lt;em&gt;Rfacebook&lt;/em&gt;, której nie ma w CRANie, ale jest na GitHubie - jest sposób, aby i takie coś zainstalować w pakiecie R i korzystać tak samo jak z bibliotek z CRANa. Potrzebujemy biblioteki &lt;em&gt;devtools&lt;/em&gt;, przy pomocy której zainstalujemy &lt;em&gt;Rfacebook&lt;/em&gt;.&#10;Najpierw instalujemy &lt;em&gt;devtools&lt;/em&gt;:&lt;/p&gt;</description></item><item><title>Róbmy swoje, Panie Wojtku!</title><link>https://blog.prokulski.science/2017/03/16/robmy-swoje-panie-wojtku/</link><pubDate>Thu, 16 Mar 2017 14:22:03 +0000</pubDate><guid>https://blog.prokulski.science/2017/03/16/robmy-swoje-panie-wojtku/</guid><description>&lt;p&gt;Wczoraj wieczorem &lt;a href="http://kultura.gazeta.pl/kultura/7,114526,21265584,wojciech-mlynarski-legenda-polskiej-piosenki-i-kabaretu.html"&gt;zmarł&lt;/a&gt; Wojciech Młynarski.&#10;Zobaczmy czy był popularny - korzystając z Wikipedii.&#10;Za miarę popularności uznamy &lt;strong&gt;liczbę wyświetleń hasła poświęconemu &lt;a href="https://pl.wikipedia.org/wiki/Wojciech_M%C5%82ynarski"&gt;Panu Wojciechowi&lt;/a&gt; w polskiej Wikipedii&lt;/strong&gt;. Im bardziej osoba popularna, tym częściej poszukuje się o niej informacji. Założenie dość dobre, prawda? Chyba, że… tak - w przypadku ogólnego medialnego szumu wokół osoby (na przykład z powodu śmierci) ta miara zostaje zaburzona. Co też za chwilę zobaczycie.&#10;Potrzebne będzie kilka bibliotek - do obróbki danych &lt;em&gt;dplyr&lt;/em&gt; oraz &lt;em&gt;reshape2&lt;/em&gt;, do wykresów &lt;em&gt;ggplot2&lt;/em&gt;; &lt;em&gt;stringr&lt;/em&gt; przyda się do jednego przekształcenia ciągu znaków. Dane pobierzemy przez API w formacie JSON z serwisu &lt;a href="https://wikimedia.org"&gt;Wikimedia.org&lt;/a&gt; przy pomocy &lt;em&gt;httr&lt;/em&gt; i przekształcimy do formatu data.frame przez fromJSON() z biblioteki &lt;em&gt;jsonlite&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Pogoda w Warszawie</title><link>https://blog.prokulski.science/2017/03/14/pogoda-w-warszawie/</link><pubDate>Tue, 14 Mar 2017 14:49:49 +0000</pubDate><guid>https://blog.prokulski.science/2017/03/14/pogoda-w-warszawie/</guid><description>&lt;p&gt;Rozmowy o pogodzie. Taki small talk.&#10;Z potwierdzeniem liczbowym faktów znanych z życia codziennego. Oraz - &lt;strong&gt;kiedy na urlop?&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Dane pobieramy ze strony wunderground.com, gdzie każdy dzień ma swój URL &lt;a href="https://www.wunderground.com/history/airport/EPWA/2017/3/13/DailyHistory.html?HideSpecis=0"&gt;(przykład)&lt;/a&gt;, dzięki czemu możemy dość łatwo przejść dzień po dniu w pętli. Tym razem będzie bez gotowego kodu, a jedynie wskazówka co jest potrzebne:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;biblioteka &lt;em&gt;rvest&lt;/em&gt;&lt;/li&gt;&#10;&lt;li&gt;po wczytaniu strony dla konkretnego dnia trzeba znaleźć tabelkę (inspektor HTMLa w Chrome bardzo przydatny do tego celu)&lt;/li&gt;&#10;&lt;li&gt;z pomocą &lt;em&gt;html_table()&lt;/em&gt; pobieramy dane z HTMLa do tabeli&lt;/li&gt;&#10;&lt;li&gt;dla każdego kolejnego dnia robimy to samo, łącząc w jednej tabeli wszystkie dane&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Tak przygotowane dane warto zapisać lokalnie i później korzystać już z lokalnego pliku.&#10;Pobrałem dane dla całych lat 2000 - 2016, dla Warszawy. Po uporządkowaniu typów danych i wyczyszczeniu ich z braków lub błędów możemy zobaczyć jak wyglądają. Na przykład temperatura:&lt;/p&gt;</description></item><item><title>Poszukiwanie nowej muzyki</title><link>https://blog.prokulski.science/2017/03/09/poszukiwanie-nowej-muzyki/</link><pubDate>Thu, 09 Mar 2017 10:00:43 +0000</pubDate><guid>https://blog.prokulski.science/2017/03/09/poszukiwanie-nowej-muzyki/</guid><description>&lt;p&gt;Dzisiaj zajmiemy się poszukiwaniem nowej muzyki. Uwielbiam poznawać nową muzykę, poszukiwać nowych &lt;em&gt;smaków&lt;/em&gt; i cieszyć się nowymi odkryciami. Co prawda od kilku lat coraz trudniej znaleźć coś interesującego i innego. Albo są to &lt;em&gt;popłuczyny po Kornie&lt;/em&gt;, albo jakaś kolejna wersja wczesnego Coldplay (który z każdą nową płytą jest coraz dalej od mojego gustu).&#10;Do poszukiwań wykorzystamy to co już znamy i lubimy. Bo &lt;em&gt;najbardziej podobają mi się piosenki, które już raz słyszałem&lt;/em&gt;. W określeniu tego co znamy i lubimy pomoże LastFM. Serwis o którym pisałem przy okazji &lt;a href="../../2017/03/01/jesienna-deprecha/"&gt;analizy nastrojów muzycznych&lt;/a&gt; zbiera nasze &lt;em&gt;scrobble&lt;/em&gt; (przesłuchane utwory), ale posiadając tak dużo danych potrafi “polecić” coś od siebie. Algorytm polecający LastFM w dużym stopniu polega na porównywaniu gustów poszczególnych użytkowników, szukaniu podobieństw i wskazywaniu wykonawców pasujących do już znanych. Albo do innych wykonawców, mniej więcej na zasadzie: skoro dużo osób słucha Nirvany i Pearl Jam to te kapele są do siebie podobne. Oczywiście to nie jedyne cechy podobieństwa - są też tagi, lata działalności itp.&#10;Nie będę wchodził w algorytm LastFM, a wykorzystam dane jakie można z LastFM uzyskać. A z pomocą pakietu &lt;strong&gt;RLastFM&lt;/strong&gt; w łatwy sposób uzyskamy dostęp do API serwisu.&#10;Przygotowanie R do pracy to ewentualne zainstalowanie wspomnianego pakietu, uzyskanie klucza API z LastFM oraz załadowanie potrzebnych bibliotek (tutaj: dplyr, ggplot2, reshape2). Wszystko to opisałem w poście &lt;a href="../../2017/03/01/jesienna-deprecha/"&gt;“Jesienna deprecha”&lt;/a&gt;.&#10;Konfiguracja skryptu to 4 zmienne:&lt;/p&gt;</description></item><item><title>Pulp Fiction - analiza filmu</title><link>https://blog.prokulski.science/2017/03/03/pulp-fiction-analiza-filmu/</link><pubDate>Fri, 03 Mar 2017 16:59:47 +0000</pubDate><guid>https://blog.prokulski.science/2017/03/03/pulp-fiction-analiza-filmu/</guid><description>&lt;p&gt;Jak dobrze znacie Pulp Fiction? Ja widziałem ten film chyba ze 20 razy. Ciekawe jak widzi go maszyna… Jeśli nie oglądaliście jakimś cudem filmu uprzedzam - poniżej są spoilery. Nawet maszyna je wychwyciła ;)&#10;Zajmiemy się analizą scenariusza. Podobnie jak było z &lt;a href="../../2017/02/27/oscary-2017-kto-wygral-bez-czytania-wiadomosci/"&gt;twittami przy Oscarach&lt;/a&gt; - nie będziemy go czytać (no, prawie - do uporządkowania danych przyda się znajomość filmu - jak widać poniżej wskazuję konkretne linijki), pozwolimy na mechaniczną analizę.&#10;Na początek potrzebny będzie tekst scenariusza. Jest kilka serwisów, na których można znaleźć takie rzeczy, wczytajmy więc gotowy tekst. Potrzebujemy tekstu angielskiego - w drugiej części wpisu pokusimy się o analizę emocjonalną tekstu, a tutaj o polskie słowniki trudno. Trudno byłoby też pewnie znaleźć przetłumaczony scenariusz.&lt;/p&gt;</description></item><item><title>Jesienna deprecha</title><link>https://blog.prokulski.science/2017/03/01/jesienna-deprecha/</link><pubDate>Wed, 01 Mar 2017 16:35:06 +0000</pubDate><guid>https://blog.prokulski.science/2017/03/01/jesienna-deprecha/</guid><description>&lt;p&gt;&lt;em&gt;Mam znowu doła&#10;Znów pragnę śmierci&#10;Wracają stare lęki&#10;I nie mogę w nocy spać&lt;/em&gt;&#10;Czy “jesienna deprecha” ma odbicie w słuchanej muzyce?&#10;&lt;img src="../../downloads/2017/03/polovirus-300x270.jpg" alt=""&gt;Zacytowany na początku tekst to oczywiście piosenka &lt;a href="https://www.youtube.com/watch?v=YTxqaHrXgHQ"&gt;“Jesienna deprecha”&lt;/a&gt; Kur z niesamowitej płyty &lt;a href="https://pl.wikipedia.org/wiki/P.O.L.O.V.I.R.U.S."&gt;P.O.L.O.V.I.R.U.S.&lt;/a&gt;.&#10;Zadanie na dzisiaj to weryfikacja czy pora roku albo pora dnia mają wpływ na nastrój słuchanej muzyki. Ktoś może powiedzieć, że oczywiście, że tak, że jasne, że &lt;em&gt;“jesienią to ja tylko Radiohead i Portishead, a na wiosnę to ABBA, latem zaś Jamajka i Bob Marley”&lt;/em&gt;. Dowody? Historia przesłuchanych utworów, z datą i godziną? Ma?&#10;Ja mam. Serwis się nazywa &lt;a href="https://www.last.fm/"&gt;Last.FM&lt;/a&gt; i pozwala przy pomocy różnych wtyczek (albo bezpośredniego połączenia konta np. w Spotify z LastFM) zbierać statystyki. Jak się ma dane od tysięcy (tfu! &lt;a href="https://techcrunch.com/2016/09/01/43-million-passwords-hacked-in-last-fm-breach/"&gt;43 milionów&lt;/a&gt; - przynajmniej tak donosił TechCrunch, chociaż przy nieco innej okazji) słuchaczy muzyki, to można robić z nimi cuda. Można je też sprzedawać wytwórniom płytowym albo stacjom radiowym, dzięki czemu wiedzą co jest “na topie” bezpośrednio od użytkowników. I dzięki temu produkują, to co produkują. Można też dowiedzieć się, kto słucha muzyki przed oficjalną premierą płyty i ścigać takie osoby. Polecam hasło &lt;a href="https://en.wikipedia.org/wiki/Last.fm"&gt;Last.fm w angielskiej Wikipedii&lt;/a&gt;, o ile oczywiście nie znacie samego serwisu.&#10;Ale wracjamy do tematu. Potrzebna jest historia przesłuchanych utworów, którą weźmiemy z Last.fm. Użyjemy do tego pakietu, który został już wycofany z CRANa… Trzeba zainstalować ręcznie paczkę pobraną z &lt;a href="https://cran.r-project.org/src/contrib/Archive/RLastFM/RLastFM_0.1-5.tar.gz"&gt;archiwum CRANa&lt;/a&gt;.&#10;Potrzebny jest też klucz API dla LastFM - zdobyć można go na &lt;a href="http://www.last.fm/api/account/create"&gt;stronie API Last.fm&lt;/a&gt;, a jego wartość należy wpisać zmiennej &lt;strong&gt;lastkey&lt;/strong&gt;.&#10;Później dane z Last.fm będziemy łączyć z danymi ze Spotify (zwracanymi jako JSON) - stąd odpowiednie biblioteki.&lt;/p&gt;</description></item><item><title>Oscary 2017 - kto wygrał? Bez czytania wiadomości!</title><link>https://blog.prokulski.science/2017/02/27/oscary-2017-kto-wygral-bez-czytania-wiadomosci/</link><pubDate>Mon, 27 Feb 2017 15:44:51 +0000</pubDate><guid>https://blog.prokulski.science/2017/02/27/oscary-2017-kto-wygral-bez-czytania-wiadomosci/</guid><description>&lt;p&gt;Jak dowiedzieć się kto wygrał Oscara? Bez czytania wiadomości. W każdej z kategorii. Korzystając tylko z Twittera, ale bez czytania poszczególnych twittów! Da się?&#10;Oczywiście, że się da. Potrzebujemy tylko danych i odrobiny sprytu przy ich przetwarzaniu.&#10;Najpierw dane. Napisałem skrypt, który pobierał co 5 minut wszystkie nowe twitty z hashtagu &lt;a href="https://twitter.com/search?q=%23Oscars"&gt;#Oscars&lt;/a&gt; i zapisywał je w pliku “Oscars_hash.Rds” lokalnie na dysku. Sposobów na pobranie danych z Twittera jest wiele, ja wybrałem ten - najszybciej było mi napisać odpowiedni skrypcik (w R - mniej więcej robiący tyle: wyszukaj najnowsze twitty z określonym hasłem, dodaj je do już znalezionych) i po prostu zostawić komputer na noc.&#10;Te same dane można pobrać i wpakować do bazy danych.&#10;Można też przygotować skrypt, który pobierze wszystko na raz.&#10;Skrypt możecie przygotować sobie samodzielnie, zachęcam. Tak czy inaczej - w R polecam bibliotekę &lt;a href="https://cran.r-project.org/web/packages/twitteR/index.html"&gt;twitteR&lt;/a&gt;.&#10;Trzeba jednak liczyć się z ograniczeniami API Twittera - określona liczba zapytań w czasie, określona (maksymalna) liczba wyników zwracanych dla jednego zapytania. Z powodu tych ograniczeń dane przygotowane przeze mnie zawierają maksymalnie 3200 Twittów pobranych raz na 5 minut. Do naszej analizy to wystarczy. Poza tym - moją ideą przy prezentowaniu kolejnych postów jest pokazanie, że bez płacenia za jakiekolwiek dane można fajnie się pobawić i czegoś nauczyć.&#10;Dzisiaj korzystamy jak zazwyczaj z bibliotek &lt;em&gt;ggplot2&lt;/em&gt;, &lt;em&gt;dplyr&lt;/em&gt;, &lt;em&gt;lubridate&lt;/em&gt; oraz &lt;a href="http://tidytextmining.com/"&gt;tidytext&lt;/a&gt; do operacji na słowach. Fajna biblioteka, dużo przykładów, jeszcze się będziemy nią bawić.&#10;Pobieramy dane zapisane przez skrypty zapisujące to, co działo się na Twitterze i rozdzielamy czas opublikowania twittu na dzień, godzinę i minutę (po tym będziemy później szukać i grupować). Przy okazji wytniemy dane tylko dla 27 lutego (ceremonia była już 27 lutego naszego czasu), żeby nie ciągnąć za dużego ogona ze sobą.&lt;/p&gt;</description></item><item><title>Oscar 2017 "Best Picture" - kto wygra?</title><link>https://blog.prokulski.science/2017/02/24/oscar-2017-best-picture-kto-wygra/</link><pubDate>Fri, 24 Feb 2017 19:00:35 +0000</pubDate><guid>https://blog.prokulski.science/2017/02/24/oscar-2017-best-picture-kto-wygra/</guid><description>&lt;p&gt;&lt;strong&gt;Czy da się wytypować zdobywcę Oscara za pomocą matematyki?&lt;/strong&gt;&#10;Spróbujmy odpowiedzieć na tak postawione pytanie. I sprawdźmy, czy model oparty na dostępnych danych wskaże faworyta “La la land” jako zwycięzcę w kategorii “Najlepszy film”.&#10;&lt;a href="../../downloads/2017/02/Academy_Award_trophy.jpg"&gt;&lt;img src="../../downloads/2017/02/Academy_Award_trophy-165x300.jpg" alt=""&gt;&lt;/a&gt;Na początek rozważmy czego możemy się dowiedzieć z ogólnodostępnych źródeł? Weźmy na przykład bazę filmów z serwisu &lt;a href="http://www.imdb.com"&gt;IMDb.com&lt;/a&gt;. Mamy tam takie informacje:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;średnia głosów społeczności&lt;/li&gt;&#10;&lt;li&gt;ilość oddanych głosów&lt;/li&gt;&#10;&lt;li&gt;mamy ocenę krytyków (wskaźnik MetaScore)&lt;/li&gt;&#10;&lt;li&gt;informacje o obsadzie, reżyserze, gatunku&lt;/li&gt;&#10;&lt;li&gt;informacje o czasie trwania&lt;/li&gt;&#10;&lt;li&gt;koszt (budżet) filmu&lt;/li&gt;&#10;&lt;li&gt;mamy przychód z kin - w weekend otwarcia oraz całkowity&lt;/li&gt;&#10;&lt;li&gt;wreszcie - wiemy czy film zdobył Oscara wcześniej czy nie (w odpowiednim roku)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Spróbujmy zatem na początek pobrać potrzebne informacje wprost z &lt;a href="http://www.imdb.com"&gt;IMDb.com&lt;/a&gt;.&#10;Te biblioteki nam się przydadzą:&lt;/p&gt;</description></item><item><title>Grudniowe dzieci</title><link>https://blog.prokulski.science/2017/02/23/grudniowe-dzieci/</link><pubDate>Thu, 23 Feb 2017 22:49:16 +0000</pubDate><guid>https://blog.prokulski.science/2017/02/23/grudniowe-dzieci/</guid><description>&lt;p&gt;Czy zastanawialiście się w jakim miesiącu najczęściej bywacie na urodzinowych imprezach?&#10;Wtedy, kiedy mają te urodziny, prawda? A kiedy mają? Wtedy, kiedy rodzi się najwięcej dzieci, czyż nie?&#10;Sprawdźmy to - korzystając z &lt;a href="http://demografia.stat.gov.pl/bazademografia/"&gt;danych GUS&lt;/a&gt; oraz stosunkowo prostego skryptu w &lt;a href="https://cran.r-project.org/"&gt;języku R&lt;/a&gt;.&#10;Na początku potrzebne będzie kilka bibliotek do wygodnego przetwarzania danych. Jeśli nie masz ich - zainstaluj.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;tidyverse&lt;/strong&gt; - to biblioteka wywołująca inne biblioteki, taki skrót. My będziemy potrzebować konkretnie &lt;strong&gt;dplyr&lt;/strong&gt; (do szybkich operacji na danych) oraz &lt;strong&gt;ggplot2&lt;/strong&gt; (do rysowania wykresów)&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;XLConnect&lt;/strong&gt; - jedna z wielu pozwalająca na czytanie arkuszy Excela (dane GUS są zapisane w tej formie), ja lubię ją najbardziej (jest wygodna w użyciu). Uwaga - wymaga Javy&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;reshape2&lt;/strong&gt; - kolejna do manipulacji danymi, w tym przypadku do będzie potrzebna do &lt;em&gt;rozpivotowania&lt;/em&gt; danych (funkcja &lt;em&gt;melt()&lt;/em&gt;)&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;lubridate&lt;/strong&gt; - do transformacji dat&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Po ewentualnej instalacji (poprzez &lt;em&gt;install.packages()&lt;/em&gt;) możemy załadować biblioteki do R:&lt;/p&gt;</description></item></channel></rss>