Generator of random data frames.
Project description
Random Data Generators Python package
Introduction
This Python package has functions for generating random strings, words, pet names, and (tabular) data frames.
The full list of features and development status can be found in the org-mode file Random-data-generators-work-plan.org.
Motivation
The primary motivation for this package is to have simple, intuitively named functions for generating random vectors (lists) and data frames of different objects.
Although, Python has support of random vector generation, it is assumed that commands like the following are easier to use:
random_string(6, chars = 4, pattern = "[\l\d]")
Installation
To install from GitHub use the shell command:
python -m pip install git+https://github.com/antononcube/Python-packages.git#egg=RandomDataGenerators\&subdirectory=RandomDataGenerators
To install from PyPi.org:
python -m pip install RandomDataGenerators
Setup
from RandomDataGenerators import *
The import command above is equivalent to the import commands:
from RandomDataGenerators.RandomDataFrameGenerator import random_data_frame
from RandomDataGenerators.RandomFunctions import random_string
from RandomDataGenerators.RandomFunctions import random_word
from RandomDataGenerators.RandomFunctions import random_pet_name
from RandomDataGenerators.RandomFunctions import random_pretentious_job_title
We are also going to use the packages random
, numpy
, and pandas
:
import random
import numpy
import pandas
pandas.set_option('display.max_columns', None)
Random strings
The function random_string
generates random strings. (It is based on
the package
StringGenerator
,
[PW1].)
Here we generate a vector of random strings with length 4 and characters that belong to specified ranges:
random_string(6, chars=4, pattern = "[\d]") # digits only
## ['3749', '4572', '9812', '7395', '2388', '7625']
random_string(6, chars=4, pattern = "[\l]") # letters only
## ['FhSd', 'DNSu', 'YggC', 'ajqA', 'dIBt', 'Mjdc']
random_string(6, chars=4, pattern = "[\l\d]") # both digits and letters
## ['yp4u', '2Shk', 'pvpS', 'M43O', 'm5SX', 'It3L']
Random words
The function random_word
generates random words.
Here we generate a list with 12 random words:
random_word(12)
## ['arteria', 'Sauria', 'mentation', 'elope', 'expositor', 'planetarium', 'agglutinin', 'Faunus', 'flab', 'slub', 'Chasidic', 'Jirrbal']
Here we generate a table of random words of different types (kinds):
dfWords = pandas.DataFrame({k: random_word(6, kind = k) for k in ["Any", "Common", "Known", "Stop"]})
print(dfWords.transpose().to_string())
## 0 1 2 3 4 5
## Any stuffing mind-altering angrily Embothrium sorbet smoking
## Common reason mackerel alignment calculator halfback paranoiac
## Known tannoy double-date deckled gynandromorphous gravitative steganography
## Stop about N noone next back alone
Remark: None
can be used instead of 'Any'
.
Random pet names
The function random_pet_name
generates random pet names.
The pet names are taken from publicly available data of pet license registrations in the years 2015–2020 in Seattle, WA, USA. See [DG1].
The following command generates a list of six random pet names:
random.seed(32)
random_pet_name(6)
## ['Oskar', 'Bilbo "Bobo" Waggins', 'Maximus', 'Gracie', 'Osa', 'Fabio']
The named argument species
can be used to specify specie of the random
pet names. (According to the specie-name relationships in [DG1].)
Here we generate a table of random pet names of different species:
dfPetNames = pandas.DataFrame({ wt: random_pet_name(6, species = wt) for wt in ["Any", "Cat", "Dog", "Goat", "Pig"] })
dfPetNames.transpose()
## 0 1 2 3 4 5
## Any Lumen Asha Echo Yuki Francis Charlie
## Cat Ellie Roxie Grace Norman Bean Mr. Darcy Hermione
## Dog Brewski Matzo Joey K. C. Oscar Gracie
## Goat Lula Brussels Sprout Grace Moppet Frosty Arya
## Pig Millie Guinness Guinness Atticus Guinness Millie
Remark: None
can be used instead of 'Any'
.
The named argument weighted
can be used to specify random pet name
choice based on known real-life number of occurrences:
random.seed(32);
random_pet_name(6, weighted=True)
## ['Zorro', 'Beeker', 'Lucy', 'Blanco', 'Winston', 'Petunia']
The weights used correspond to the counts from [DG1].
Remark: The implementation of random-pet-name
is based on the
Mathematica implementation
RandomPetName
,
[AAf1].
Random pretentious job titles
The function random_pretentious_job_title
generates random pretentious
job titles.
The following command generates a list of six random pretentious job titles:
random_pretentious_job_title(6)
## ['Direct Identity Officer', 'District Group Synergist', 'Lead Brand Liason', 'Central Configuration Administrator', 'Senior Accountability Facilitator', 'Dynamic Web Producer']
The named argument number_of_words
can be used to control the number
of words in the generated job titles.
The named argument language
can be used to control in which language
the generated job titles are in. At this point, only Bulgarian and
English are supported.
Here we generate pretentious job titles using different languages and number of words per title:
random.seed(2)
random_pretentious_job_title(12, number_of_words = None, language = None)
## ['Manager', 'Клиентов Асистент на Инфраструктурата', 'Customer Quality Strategist', 'Наследствен Анализатор по Идентичност', 'Administrator', 'Изпълнител на Фактори', 'Administrator', 'Architect', 'Investor Assurance Agent', 'Прогресивен Служител по Сигурност', 'Координатор', 'Анализатор по Оптимизация']
Remark: None
can be used as values for the named arguments
number_of_words
and language
.
Remark: The implementation uses the job title phrases in
https://www.bullshitjob.com . It is, more-or-less, based on the
Mathematica implementation
RandomPretentiousJobTitle
,
[AAf2].
Random tabular datasets
The function random_data_frame
can be used generate tabular data
frames.
Remark: In this package a data frame is an object produced and
manipulated by the package pandas
.
Here are basic calls:
random_data_frame()
random_data_frame(None, row_names=True)
random_data_frame(None, None)
random_data_frame(12, 4)
random_data_frame(None, 4)
random_data_frame(5, None, column_names_generator = random_pet_name)
random_data_frame(15, 5, generators = [random_pet_name, random_string, random_pretentious_job_title])
random_data_frame(None, ["Col1", "Col2", "Col3"], row-names=False)
Here is example of a generated data frame with column names that are cat pet names:
random_data_frame(5, 4, column_names_generator = lambda size: random_pet_name(size, species = 'Cat'), row_names=True)
## Meryl Oreo Douglas Fur Sprockett
## id.0 -1.053990 QhFlT 0 o7p5f
## id.1 -0.707621 G90kh 0 yBupF
## id.2 0.494162 eMVtF 0 Ez2Df
## id.3 0.400718 tx3HL 2 3Tz7I
## id.4 -1.345948 r3NRa 0 whfam
Remark: Both wide format and long format data frames can be generated.
Remark: The signature design and implementation are based on the
Mathematica implementation
RandomTabularDataset
,
[AAf3]. There are also corresponding packages written in R, [AAp1],
and Raku, [AAp2].
Here is an example in which some of the columns have specified generators:
random.seed(66)
random_data_frame(10,
["alpha", "beta", "gamma", "zetta", "omega"],
generators = {"alpha" : random_pet_name,
"beta" : numpy.random.normal,
"gamma" : lambda size: numpy.random.poisson(lam=5, size=size) } )
## alpha beta gamma zetta omega
## 0 Frayda 0.811681 4 1V05P swing
## 1 Rosie 0.591327 3 tg7yn Carolus
## 2 Jovi 0.563906 7 imaDl sailor
## 3 Pilot 0.607250 7 WAg8u echinus
## 4 Brodie 0.279003 12 yXEao Ramayana
## 5 Springer -1.394703 5 JFBoz simper
## 6 Uma -0.538088 8 7ATV1 consecrate
## 7 Diva 0.343234 4 GeJUh blight
## 8 Fezzik 1.506241 6 yEPI5 misappropriation
## 9 Hana -1.359908 4 PG3IS diploidy
References
Articles
[AA1] Anton Antonov, “Pets licensing data analysis”, (2020), MathematicaForPrediction at WordPress.
Functions, packages
[AAf1] Anton Antonov, RandomPetName, (2021), Wolfram Function Repository.
[AAf2] Anton Antonov, RandomPretentiousJobTitle, (2021), Wolfram Function Repository.
[AAf3] Anton Antonov, RandomTabularDataset, (2021), Wolfram Function Repository.
[AAp1] Anton Antonov, RandomDataFrameGenerator R package, (2020), R-packages at GitHub/antononcube.
[AAp2] Anton Antonov, Data::Generators Raku package, (2021), Raku Modules.
[PW1] Paul Wolf, StringGenerator Python package, (PyPi.org)(https://pypi.org).
[WRI1] Wolfram Research (2010), RandomVariate, Wolfram Language function.
Data repositories
[DG1] Data.Gov, Seattle Pet Licenses, catalog.data.gov.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for RandomDataGenerators-0.2.8.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 67397e94e930427809baf241c77c3622999c10819f7b2008c1aaa4e88ffe9d95 |
|
MD5 | 802910ba9371862dafe5f4c6434e5803 |
|
BLAKE2b-256 | 432b8fe0cab8e18be16cd668134fed94a9a14adef5ab5135e0e6a1c682f61dca |
Hashes for RandomDataGenerators-0.2.8-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ef40fc2d929d33b74699117e132af5fbd67eb6923f16d80c85e407bcea9e3a66 |
|
MD5 | a1956c6ee8cf4aa6ea13f1c393169e74 |
|
BLAKE2b-256 | 148a33da0a68925cfe7e61f6f6344cda022845e7759c374193b492c5c148c8b0 |