Trzy miesiące temu opisywałem zbiór danych o ofertach sprzedaży samochodów z serwisu otomoto.pl (zobacz tutaj). Po kwartale ponownie zebrałem informacje o ofertach sprzedaży. Porównując te dwa zbiory będzie można sprawdzić jak zmieniają się ceny różnych modeli w odpowiedzi na podwyższoną akcyzę na olej napędowy. Kolejne interesujące pytanie to globalna zmiana cen aut używanych w ,,czasach kryzysu’’. Interesujący będize trend zmian w liczbie ofert samochodów sprowadzanych z zagranicy. Efekt starzenia się auta, z dnia na dzień auto staje sie o rok starsze, ciekawe czy dla aut używanych wiek w latach ma duzy wpływ na cenę auta.
Nowy zbiór danych jest dostępny w postaci csv i Rdata pod tym adresami [csv 80Mb], [Rdata 5,5 MB].
Skrypt wczytujący dane bezpośrednio z Internetu do R znajduje się tutaj.
Ponieważ ostatnio pojawiały się pytania o skrypty użyte do parsowania stron interntowych i zbierania automatycznego danych, więc do tych danych dołączam wszystkie skrypty potrzebne do ich zebrania i przetworzenia. Poniżej krótko je opiszę. Wykorzystuję tutaj głównie Perla i wyrażenia regularne pozwalające na łatwe i szybkie parsowanie tekstu. Z pewnością istnieją lepsze (łatwiejsze) sposoby parsowania stron HTML, chętnie usłyszę sugestie.
W moim rozwiązaniu proces zbierania danych jest dwuetapowy. Pierwszy etap to przejrzenie hierarchicznej struktury ofert sprzedaży samochodów oraz zapisanie z każdej oferty wybranych pól. Dodatkowo należy zatroszczyć się o to by to samo auto nie zostało dwukrotnie dodane do listy aut. Ponieważ parsowanie 200 tys ofert trochę trwa, a tym czasie do serwisu dodawane są nowe oferty, więc potrzebna jest dodatkowa tablica haszująca pamiętająca, które auta zostały już przetworzone. Skrypt perlowy, który wykorzystałem w tym celu znajduje się tutaj [skrypt perl]. Plik wynikowy, z zebranymi danymi znajduje się tutaj [surowe dane po pierwszym etapie 140MB].
Ponieważ dla różnych ofert sprzedaży przedstawiane są różne charakterystyki, niektórych opisów brakuje, niektóre parametry są w różnych formatach, dlatego też w drugim kroku wykorzystuję skrypt R obrabiający surowe dane i przekształcający je do postaci tabelarycznej, łatwiejszej w obróbce. Przy okazji cena aut w walucie przeliczana jest na PLN, liczona jest pojemność skokowa, moc i inne parametry, które w surowych danych sa zapisane w formacie tekstowym. Skrypt użyty do transformacji znajduje sie tutaj [skrypt r], a plik wynikowy znajduje się tutaj [plik csv].
Smacznego!
Dobra, użyteczna robota! Dzięki
Dzięki! Bawiłem się z pakietem XML i można znaleźć tam sporo podobnych funkcji jak w kodzie perla. Super przydatne są te funkcje do przetwarzania tekstu, bardzo przydadzą się.
Swoja drogą od momentu kiedy czytam Pana bloga i zacząłem się bawić w parsowanie stron, to jak ktoś mi powie, że nie może znaleźć potrzebnych danych albo są za stare to pokażę, że się mocno myli. Zwłaszcza studenci 🙂
Właściwie cały ten kod Perla można by zastąpić kodem R z użyciem jedynie funkcji strsplit(), gsub(), grep() [można w nich używać wyrażeń regularnych]. Perla używam wyłącznie z przekonania, że jest szybszy w operacjach na napisach. Kiedyś trzeba będzie sprawdzić czy rzeczywiście takie parsowanie jest szybsze.
Jeżeli chodzi dostępność do danych, to myślę, że będzie z tym coraz lepiej. Jest coraz więcej inicjatyw zbierania i udostępniania danych (super), czy wymuszania na państwie by udostępniało dane, pojawiają się standardy dotyczace interfejsów dostępu do danych. Kolejny krok nad którym trzeba pracować to dostępność do sensownych i czytelnych analiz danych, tak by uniknąć banalnych, bzdurnych czy błędnych makaroniastych opracowań.
W sumie napisałem kod do ściągania danych z portalu otoDom, więc mogę go przerobić na potrzeby otoMoto i sprawdzimy, który jest szybszy?
Ok, świetny pomysł, trzeba tylko uruchomić je na tej samej maszynie z takim samym łączem i jakoś zniwelować wpływ proxy lub ściągać różne auta.
Jeżeli przygotujesz skrypt ściągający i parsujący 1000 ofert sprzedaży aut to mogę zająć się resztą, a chętnie też zobaczę jak wygląda taki parser z użyciem pakietu XML.
Własnie tak myślałem, można zrobić porównanie użycia funkcji tekstowych i XML. Usiądę do tego w przyszłym tygodniu i wyślę.
W kwestii parsowania stron gorąco polecam Pythona wraz z modułem BeautifulSoup. Pakiet XML do R’a rzeczywiście pozwala na wiele – sam używałem go np. do parsowania statystyk wyszukiwania na Wikipedii (gotową funkcję umieściłem na moim blogu: http://expansed.com/2011/08/visualising-wikipedia-search-statistics-with-r/ ) 🙂
Pozdrawiamm
@PawelM, bardzo ciekawe funkcje. Wiesz może czy gdzieś można znaleźć statystyki dotyczące użytkowników edytujących wpisy. Interesuje mnie w jakich okresach wpisy na Wikipedii są często edytowane i przez jak wielu użytkowników. W szczególności opisy partii politycznych i polityków. Można ściągnąć całą Wikipedię z historią edycji i ją parsować, ale może są gdzieś już częściowo przetworzone dane.
Bardzo ciekawy pomysł, ale niestety nie wiadomo mi nic o tym, żeby takie statystyki były gdzieś przeliczone. Napisanie parsera nie powinno być bardzo pracochłonne. Gdybyś coś takiego przygotował, chętnie również bym skorzystał. 😉 Jeżeli znajdę wolny czas to może sam coś takiego napiszę.
Pozdrawiam,
PM
Zrobię lekki offtop: Czy gdzieś w interencie jest dostępne zbiorcze źródło danych pochodzących z raportów organizacji charytatywnych? Zastanawia mnie to w kontekście co rocznych rozważań na temat WOŚP i ile to Owsiak sobie bierze do kieszeni itp. Dobrze byłoby porównać koszty działalności, przychody i wydatki na działalność poszczególnych organizacji charytatywnych.
Dla wszystkich najpewniej nie ma. Rożne fundacje są podległe różnym ministrom, w przypadku WOŚP jest to minister zdrowia. Rozliczenie z działalności fundacji trafia do właściwego ministra i do urzędu skarbowego, więc te dwie jednostki mają, mała szansa że tym się dzielą.
WOŚP na swojej stronie prezentuje rozliczenia finansowe http://www.wosp.org.pl/fundacja/rozliczeniafinansowe, ale nie wiem czy to obowiązek dla organizacji pożytku publicznego. Zresztą rozliczenia finansowe są na poziomie suma etatów – suma wydatków.
Swoją drogą wolałbym zacząć od rozliczenia etatów opłacanych z podatków, to są pieniądze publiczne. Fundacje dostają pieniądze z dobrowolnych darowizn, darczyńcy powinni więc sami dbać o to by wpłacać pieniądze na organizacje które wydają ich darowizny efektywnie.
Nie miałem na myśli rozliczania a polemikę z osobami, które krytykują WOŚP jedynie na podstawie jakiś (skąd?) przesłanek na temat trwonienia pieniędzy, które zbierają.
Myślę, że automatycznie tego zrobić się nie da. Każda fundacja jest inna i trudno badać ich wydajność na podstawie ekonometrycznych wskaźników.
Ale można by coś użytecznego zrobić używając inicjatyw typu crowdsourcing, w którym oceniano by umiejętność wykorzystywania darowizn.
Swoja droga portal, który by takie informacje umieszczał byłby bardzo użyteczny, szczególnie w wybieraniu na co przekazać 1% z podatków.
Przekazuję komentarz Alka J., któremu nie zadziała opcja dodania komentarza.
@Maciej, smarterpoland: taka baza jak najbardziej istnieje, jest prowadzona przez Ministra Pracy i Polityki Społecznej i publikowane są w niej sprawozdania finansowe i merytoryczne organizacji pożytku publicznego: http://bopp.pozytek.gov.pl/
Organizacje pożytku publicznego w pewnym sensie wykorzystują pieniądze publiczne, ponieważ można na ich rzecz przekazywać 1% PIT. Warto sprawdzić, jak to robią. 🙂 Niestety sprawozdania finansowe są dość hermetyczne i raczej nie ułatwiają badania efektywności, zaś sprawozdania merytoryczne do tej pory mogły wyglądać dowolnie (co ma swoje wady i zalety).
Od tego roku została określona forma sprawozdań merytorycznych OPP. Można się z nią zapoznać na http://isap.sejm.gov.pl/DetailsServlet?id=WDU20110800434 — znajduje się tam wiele dobrych pytań, np. o ilość odbiorców działań organizacji, podział przychodów i wydatków, liczbę wolontariuszy i pracowników oraz ich wynagrodzenia. Sprawozdania merytoryczne wg nowego wzoru trzeba składać do 15 lipca, szykuje się więc nowe interesujące źródło danych, w którego analizie chętnie wezmę udział. 🙂
Fajny tool:
http://scrapy.org/