blog.furas.pl
# prywatne notatki - Python, Linux, Machine Learning, etc.

Ankieta na KDNuggets: Jakich narzędzi używasz?

Na głównej stronie KDNuggets.com pojawiła się ankieta z pytaniem:

What software you used for Analytics, Data Mining, Data Science, Machine Learning projects in the past 12 months?

Jakie oprogramowanie używałeś w projektach z Analytics, Data Mining, Data Science, Machine Learning w ostatnich 12 miesiącach?

Dostępne są też aktualne wyniki głosowania

Poniżej pobranie wyników jako CSV aby móc potem samodzielnie je analizować.

Pandas

Za pomocą Pandas można łatwo pobrać tabelę bezpośrednio jako DataFrame.

import pandas as pd

# adres z wynikami ankiety
url = 'http://vote.sparklit.com/poll.spark/203792'

# wczytanie strony i odnalezienie wszystkich tabel
tables = pd.read_html(url)

# pobranie odpwiedniej tabeli i pominięcie nagłówka
df = tables[4][1:]

# podział tekstu z nazwą i ilością głosów na dwie kolumny 
#df = df[0].str.extract('(.*) \((\d+)\)')

# to co powyżej z nadaniem kolumnom odpowiednich nazw 
df = df[0].str.extract('(?P<software>.*) \((?P<votes>\d+)\)', expand=True)

# zapisanie do pliku
df.to_csv('poll-kdnuggets-software-pandas.csv')

# wyświetlenie początku danych
print(df.head())

# ... samodzielna analiza ...

Wyświetlane dane:

                  software votes
1                  Alteryx    71
2  Amazon Machine Learning    59
3                 Anaconda   546
4         Angoss/Datawatch     7
5               BayesiaLab    10

CSV: poll-kdnuggets-software-pandas.csv (stan na 2018.05.13 - ankieta wciąż otwarta)

Kod: poll-kdnuggets-software-pandas.py

Aktualizacja:

Wersja, która tworzy kolumnę "group" oznaczającą do jakiej grupy w ankiecie należy dany program. Powstała ona po wersji z użyciem urllib+lxml (poniżej) i tam jest opis grup.

import pandas as pd

# adres z wynikami ankiety
url = 'http://vote.sparklit.com/poll.spark/203792'

# wczytanie strony i odnalezienie wszystkich tabel
tables = pd.read_html(url)

# pobranie odpwiedniej tabeli i pominięcie nagłówka
df = tables[4][1:]

# podział tekstu z nazwą programu, ilością głosów i grupą na trzy kolumny 
# z nadaniem kolumnom odpowiednich nazw 
df = df[0].str.extract('(?:(?P<group>.+): )?(?P<software>.*) \((?P<votes>\d+)\)', expand=True)

# dodanie grupy do pierwszego programu
df['group'][1] = 'Analytics, Data Science, Machine Learning platforms'

# wypełnienie grup dla pozostałych programów
df = df.fillna(method='ffill')

# zapisanie do pliku
df.to_csv('poll-kdnuggets-software-with-group-pandas.csv')

# wyświetlenie końca danych bo tam widać więcej grup
print(df.tail(25))

# ... samodzielna analiza ...

Wyświetlane dane:

             group                                  software votes
64       Languages                                    Python  1090
65       Languages                                R Language   826
66       Languages                                     Scala    92
67       Languages                              SQL Language   660
68       Languages                       Unix shell/awk/gawk   144
69       Languages      Other programming and data languages   121
70  Big Data Tools                              Apache Spark   359
71  Big Data Tools                   Commercial Hadoop Tools    97
72  Big Data Tools                  Open Source Hadoop Tools   178
73  Big Data Tools                       SQL on Hadoop tools   166
74  Big Data Tools                                 Spark SQL   188
75   Deep Learning                              Apache MXnet    21
76   Deep Learning                                     Caffe    23
77   Deep Learning                                    Caffe2    20
78   Deep Learning                            DeepLearning4J    59
79   Deep Learning                                     Keras   353
80   Deep Learning                                   Lasagne     5
81   Deep Learning  Microsoft Cognitive Toolkit (Prev. CNTK)    51
82   Deep Learning                              PaddlePaddle     1
83   Deep Learning                                   PyTorch    91
84   Deep Learning                                Tensorflow   491
85   Deep Learning                                   TFLearn    18
86   Deep Learning                                    Theano    78
87   Deep Learning                                     Torch    17
88   Deep Learning                 Other Deep Learning Tools    87

CSV: poll-kdnuggets-software-with-group-pandas.csv (stan na 2018.05.13 - ankieta wciąż otwarta)

Kod: poll-kdnuggets-software-with-group-pandas.py

urllib + lxml

Za pomocą urllib+lxml (i re) także można pobrać dane. Wymaga to więcej pracy ale przeważnie ma się większe możliwości.

W niektórych nazwach programu pojawia sie przedrostek opisujący zmianę grupy (rodzaju oprogramowania) i w tej wersji jest to wyłapywane i zapisywane w dodatkowej kolumnie. Dzięki temu będzie można wyniki grupować podczas analizy.

Dostępne grupy:

  • Analytics, Data Science, Machine Learning platforms
  • Languages
  • Big Data Tools
  • Deep Learning


import urllib.request
import lxml.html
import re
import csv

url = 'http://vote.sparklit.com/poll.spark/203792'

# pobranie strony
text = urllib.request.urlopen(url).read()

# zamiana na drzewo 
html = lxml.html.fromstring(text)

# wybranie czwartej tabeli
tables = html.xpath('//table')
table = tables[4]

# zbieranie wszystkich danych do `data`

data = []

# nazwa pierwszej grupy
group = 'Analytics, Data Science, Machine Learning platforms'

# przetwarzanie kolejnych wierszy tabeli (z pominięciem nagłówka)
for row in table.xpath('.//tr')[1:]:

    # pobranie tekstu tylko z pierwszej kolumny
    col = row.xpath('.//td[1]/font/text()')[0]

    # rozbicie tekstu na: grupa, nazwy programu, ilość głosów
    new_group, software, votes = re.search('(?:(.*): )?(.*) \((\d+)\)', col).groups()
    # niektóre nazwy moga mieć nadmiarową spację na końcu
    software = software.strip()

    # jeśli pojawiła się nowa nazwa grupy to będzie ona używana dla wszystkich następnych nazw
    if new_group:
        group = new_group

    # zapamiętanie danych 
    data.append([group, software, votes])

# zapis wszystkich danych
with open('poll-kdnuggets-software-with-group-urllib.csv', 'w') as f:
    csv_writer = csv.writer(f)
    # zapis nagłówka
    csv_writer.writerow(['group', 'software', 'votes'])
    # zapis wszystkich wierszy 
    csv_writer.writerows(data)

# wyświetlenie końca danych bo tam widać więcej grup
for row in data[-25:]:
    print('; '.join(row))

# ... samodzielna analiza ...

Wyświetlane dane:

Languages; Python; 1090
Languages; R Language; 826
Languages; Scala; 92
Languages; SQL Language; 660
Languages; Unix shell/awk/gawk; 144
Languages; Other programming and data languages; 121
Big Data Tools; Apache Spark; 359
Big Data Tools; Commercial Hadoop Tools; 97
Big Data Tools; Open Source Hadoop Tools; 178
Big Data Tools; SQL on Hadoop tools; 166
Big Data Tools; Spark SQL; 188
Deep Learning; Apache MXnet; 21
Deep Learning; Caffe; 23
Deep Learning; Caffe2; 20
Deep Learning; DeepLearning4J; 59
Deep Learning; Keras; 353
Deep Learning; Lasagne; 5
Deep Learning; Microsoft Cognitive Toolkit (Prev. CNTK); 51
Deep Learning; PaddlePaddle; 1
Deep Learning; PyTorch; 91
Deep Learning; Tensorflow; 491
Deep Learning; TFLearn; 18
Deep Learning; Theano; 78
Deep Learning; Torch; 17
Deep Learning; Other Deep Learning Tools; 87

CSV: poll-kdnuggets-software-with-group-urllib.csv (stan na 2018.05.13 - ankieta wciąż otwarta)

Kod: poll-kdnuggets-software-with-group-urllib.py

Książki: python-dla-kazdego-podstawy-programowania python-wprowadzenie python-leksykon-kieszonkowy python-receptury python-programuj-szybko-i-wydajnie python-projekty-do-wykorzystania black-hat-python-jezyk-python-dla-hackerow-i-pentesterow efektywny-python-59-sposobow-na-lepszy-kod tdd-w-praktyce-niezawodny-kod-w-jezyku-python aplikacje-internetowe-z-django-najlepsze-receptury