programador, cientista, pythonista e minimalista. Recife, Brasil

Bibliotecas Python para carregar Dataset's

Publicado em: . | Por: Gileno Filho | Arquivado em: tutoriais

Desde que a biblioteca Pandas se tornou bastante popular em análise de dados com Python, várias outras libs surgiram para auxiliar a importação de dados para objetos do tipo DataFrame (utilizados pelo Pandas).

Neste artigo irei comentar sobre duas libs:

  • db.py: Facilita a importação de bancos de dados para DataFrame's
  • PyDataset: Prover uma forma simples de acessar diversos datasets públicos - dataset's disponibilizados por bibliotecas da linguagem R

PyDataset

In [1]:
import pydataset

Com o método data é possível verificar quais os dataset's disponíveis, a própria listagem dos dataset's é um DataFrame do Pandas

In [2]:
pydataset.data().head()
Out[2]:
dataset_id title
0 AirPassengers Monthly Airline Passenger Numbers 1949-1960
1 BJsales Sales Data with Leading Indicator
2 BOD Biochemical Oxygen Demand
3 Formaldehyde Determination of Formaldehyde
4 HairEyeColor Hair and Eye Color of Statistics Students
In [3]:
pydataset.data().tail()
Out[3]:
dataset_id title
752 VerbAgg Verbal Aggression item responses
753 cake Breakage Angle of Chocolate Cakes
754 cbpp Contagious bovine pleuropneumonia
755 grouseticks Data on red grouse ticks from Elston et al. 2001
756 sleepstudy Reaction times in a sleep deprivation study

Para carregar um dataset basta passar o nome dele

In [4]:
titanic = pydataset.data('titanic')
titanic.head()
Out[4]:
class age sex survived
1 1st class adults man yes
2 1st class adults man yes
3 1st class adults man yes
4 1st class adults man yes
5 1st class adults man yes

Se quiser ver apenas a documentação do dataset basta passar a opção show_doc=True

In [5]:
pydataset.data('titanic', show_doc=True)
titanic

PyDataset Documentation (adopted from R Documentation. The displayed examples are in R)

## titanic

### Description

The data is an observation-based version of the 1912 Titanic passenger
survival log,

### Usage

    data(titanic)

### Format

A data frame with 1316 observations on the following 4 variables.

`class`

a factor with levels `1st class` `2nd class` `3rd class` `crew`

`age`

a factor with levels `child` `adults`

`sex`

a factor with levels `women` `man`

`survived`

a factor with levels `no` `yes`

### Details

titanic is saved as a data frame. Used to assess risk ratios

### Source

Found in many other texts

### References

Hilbe, Joseph M (2014), Modeling Count Data, Cambridge University Press Hilbe,
Joseph M (2007, 2011), Negative Binomial Regression, Cambridge University
Press Hilbe, Joseph M (2009), Logistic Regression Models, Chapman & Hall/CRC

### Examples

    data(titanic)
    titanic$survival <- titanic$survived == "yes"
    glmlr <- glm(survival ~ age + sex + factor(class), family=binomial, data=titanic)
    summary(glmlr)


db.py

O db.py faz conexão com os bancos relacionais mais utilizados, mas de acordo com o banco de dados será necessário instalar alguma biblioteca adicional, mais detalhes em:

No exemplo abaixo irei utilizar o sqlite3, que é o único que não precisa de nenhuma instalação adicional porque a lib de comunicação já vem com a instalação Python. O arquivo do banco sqlite3 está aqui:

In [1]:
from db import DB
database = DB(filename='../utils/logs.sqlite3', dbtype='sqlite')
Indexing schema. This will take a second...finished!

Posso verificar todas as tabelas existes

In [2]:
database.tables
Refreshing schema. Please wait...done!
Out[2]:
Schema Table Columns
public log id, path, user_id, date

Posso fazer uma consulta sql que o resultado será meu DataFrame

In [3]:
log_table = database.query('select * from log')
type(log_table)
Out[3]:
pandas.core.frame.DataFrame
In [4]:
log_table.head()
Out[4]:
id path user_id date
0 1 / 3 2017-01-03T11:41:00
1 2 /pandas/ 4 2017-01-03T11:37:00
2 3 /videos/ 5 2017-01-03T10:47:00
3 4 / 2 2017-01-03T11:51:00
4 5 /python-para-zumbis/ 5 2017-01-03T10:32:00

Como o sqlite não suporta datetime a data está em string no formato iso (%Y-%m-%d %H:%M:%S.%f), mas posso converter para datetime em python com a ajuda do pandas

In [5]:
import pandas as pd
In [6]:
log_table['date'] = pd.to_datetime(log_table['date'], format='%Y-%m-%d %H:%M:%S.%f')
In [7]:
log_table
Out[7]:
id path user_id date
0 1 / 3 2017-01-03 11:41:00
1 2 /pandas/ 4 2017-01-03 11:37:00
2 3 /videos/ 5 2017-01-03 10:47:00
3 4 / 2 2017-01-03 11:51:00
4 5 /python-para-zumbis/ 5 2017-01-03 10:32:00
5 6 /cursos/ 3 2017-01-03 11:31:00
6 7 /videos/ 4 2017-01-03 10:39:00
7 8 /cursos/ 5 2017-01-03 10:55:00
8 9 / 4 2017-01-03 11:50:00
9 10 /pandas/ 1 2017-01-03 11:38:00
10 11 /django-ecommerce/ 5 2017-01-03 11:42:00
11 12 / 4 2017-01-03 11:50:00
12 13 /django-ecommerce/ 3 2017-01-03 11:59:00
13 14 /django-ecommerce/ 4 2017-01-03 10:43:00
14 15 /python-para-zumbis/ 5 2017-01-03 11:53:00
15 16 /cursos/ 3 2017-01-03 11:39:00
16 17 /django-ecommerce/ 5 2017-01-03 11:40:00
17 18 /python-para-zumbis/ 5 2017-01-03 11:45:00
18 19 /pandas/ 2 2017-01-03 11:36:00
19 20 /django-ecommerce/ 2 2017-01-03 10:31:00
20 21 /videos/ 2 2017-01-03 11:33:00
21 22 /django-ecommerce/ 3 2017-01-03 10:35:00
22 23 / 1 2017-01-03 11:56:00
23 24 /django-ecommerce/ 4 2017-01-03 11:51:00
24 25 /cursos/ 1 2017-01-03 10:54:00
25 26 /cursos/ 4 2017-01-03 11:59:00
26 27 /python-para-zumbis/ 2 2017-01-03 10:43:00
27 28 /django-ecommerce/ 3 2017-01-03 11:57:00
28 29 /pandas/ 1 2017-01-03 10:42:00
29 30 /cursos/ 5 2017-01-03 10:57:00
... ... ... ... ...
70 71 /videos/ 1 2017-01-03 11:50:00
71 72 /videos/ 5 2017-01-03 11:59:00
72 73 / 3 2017-01-03 11:49:00
73 74 / 2 2017-01-03 11:34:00
74 75 /pandas/ 4 2017-01-03 11:35:00
75 76 /pandas/ 1 2017-01-03 11:48:00
76 77 /pandas/ 2 2017-01-03 11:35:00
77 78 /python-para-zumbis/ 3 2017-01-03 11:54:00
78 79 /pandas/ 3 2017-01-03 11:57:00
79 80 /videos/ 3 2017-01-03 11:32:00
80 81 /pandas/ 2 2017-01-03 10:36:00
81 82 /django-ecommerce/ 3 2017-01-03 11:39:00
82 83 /pandas/ 3 2017-01-03 11:51:00
83 84 /videos/ 1 2017-01-03 11:51:00
84 85 /django-ecommerce/ 3 2017-01-03 10:45:00
85 86 /videos/ 4 2017-01-03 11:59:00
86 87 /cursos/ 2 2017-01-03 10:47:00
87 88 / 5 2017-01-03 11:56:00
88 89 /python-para-zumbis/ 1 2017-01-03 11:34:00
89 90 /python-para-zumbis/ 2 2017-01-03 11:35:00
90 91 /pandas/ 2 2017-01-03 11:33:00
91 92 /python-para-zumbis/ 1 2017-01-03 11:33:00
92 93 /videos/ 2 2017-01-03 11:59:00
93 94 /django-ecommerce/ 3 2017-01-03 11:54:00
94 95 /pandas/ 2 2017-01-03 11:39:00
95 96 /django-ecommerce/ 1 2017-01-03 10:49:00
96 97 / 5 2017-01-03 10:33:00
97 98 /cursos/ 5 2017-01-03 10:31:00
98 99 /python-para-zumbis/ 3 2017-01-03 10:56:00
99 100 /cursos/ 4 2017-01-03 11:46:00

100 rows × 4 columns

A db.py tem mais algumas opções, basta acessar o link acima e verá que é bem fácil fazer consultas que retornem DataFrame's do Pandas para realizar algum tipo de análise em memória.

Qualquer dúvida ou sugestão basta comentar abaixo!

python dados

COMPARTILHAR:

Comentários

comments powered by Disqus

Sobre

Website e Blog de Gileno Filho, escrevo sobre: Desenvolvimento, Python, Django, Ciência de Dados, Engenharia de Avaliações, Inteligência Artificial e Design Minimalista.

Social