Code
import random
import pandas as pd
from tabulate import tabulateTworzenie danych
W Pythonie istnieją różne typy liczbowe, w tym liczby całkowite (int), liczby zmiennoprzecinkowe (float), oraz liczby zespolone (complex). Łańcuchy Znaków (Stringi) to sekwencje znaków używane do przechowywania i manipulowania tekstem. W Pythonie można je tworzyć poprzez umieszczenie tekstu w pojedynczych (' ') lub podwójnych (" ") cudzysłowach. Analogiczne użycie występuje w R. Listy to uporządkowane sekwencje, które mogą zawierać elementy różnych typów. Odpowiednik wektorów w R. Krotki (Tuples) są używane do przechowywania zbiorów danych, które nie powinny być zmieniane po utworzeniu. Brak odpowiednika w R. Słowniki (Dictionaries) to nieuporządkowane zbiory wartości dostępne za pomocą kluczy. Są niezwykle użyteczne do przechowywania i organizowania danych w formie par klucz-wartość.
Porównanie głównych typów danych w Python i R
| Opis | Typ danych w Python | Typ danych w R |
|---|---|---|
| Wektory | Lista (list) |
Wektor (c) |
| Tablice danych | DataFrame (pandas.DataFrame) |
Data frame (data.frame) |
| Listy | Lista (list) |
Lista (list) |
| Daty | Daty (datetime.date) |
Data (Date) |
| Słowniki | Słownik (dict) |
Lista (list) z nazwanymi elementami |
| Zbiory | Zbiór (set) |
- |
| Liczby całkowite | Liczba całkowita (int) |
Liczba całkowita (integer) |
| Liczby zmiennoprzecinkowe | Liczba zmiennoprzecinkowa (float) |
Liczba zmiennoprzecinkowa (numeric lub double) |
| Łańcuchy znaków | Łańcuch znaków (str) |
Łańcuch znaków (character) |
| Logiczne | Boolowskie (bool) |
Logiczne (logical) |
Źródło: Opracowanie własne
Import bibliotek w python wykonujemy przy użyciu funckji import, w której określamy nazwę biblioteki, którą chcemy pobrać. Zaimportowanej biliotece możemy nadać alias poprzez funkję as. Analogiczną funkcją w R jest import.packages()
Kod:
import random
import pandas as pd
from tabulate import tabulate| Zastosowanie | Funkcja w Python | Funkcja w R |
|---|---|---|
| instalacja bibliotek | pip install nazwa_paczki |
import.package("nazwa_paczki") |
| wywołanie bibliotek | import nazwa_paczki |
library(nazwa_paczki) |
Źródło: Opracowanie własne
Dane w python pobieramy przy użyciu funkcji read_excel, natomiast zapis danych wykonywany jest poprzez funkcję write_excel z bilioteki pandas. Analogicznie jest w przypadku plików .csv. Odpowiednikami w R są funkcje read.xlsx(), write.xlsx() oraz read.csv() , write.csv().
import pandas as pd
# Wczytywanie danych
#pd.read_csv('dane.csv')
#pd.read_excel('dane.csv')
# Zapisywanie danych
#dane.to_excel('dane.xlsx')
#dane.to_csv('dane.xlsx', sep=',')| Zastosowanie | Funkcja w R | Funkcja w Python | Pakiet w R | Pakiet w Python |
|---|---|---|---|---|
| Import plików .xlsx | read.xlsx |
pandas.read_excel |
utils |
pandas |
| Zapisywanie plików .xlsx | write.xlsx |
pandas.write_excels |
utils |
pandas |
| Import plików .csv | read.csv |
pandas.read_csv |
utils |
pandas |
| Zapisywanie plików .csv | write.csv |
pandas.write_csv |
utils |
pandas |
Źródło: Opracowanie własne
Dokumentacja i cheatsheet: - Pandas Documentation
Pierwszym krokiem jest stworzenie list list, które są odpowiednikami wektorów c() w R. n oznacza liczbę obserwacji, pozostałe zmienne są właściwe z ich nazwami.
n = 100
plec = ["M", "K"]
wojewodztwa = [
"mazowieckie", "śląskie", "wielkopolskie", "małopolskie",
"dolnośląskie", "warmińsko-mazurskie", "lubuskie", "lubelskie",
"podlaskie", "łódzkie", "zachodniopomorskie", "pomorskie",
"kujawsko-pomorskie", "świętokrzyskie", "opolskie", "podkarpackie"
]
kody_icd_10 = ["I10", "E11", "J18", "K21", "L20", "M54", "N30", "O14", "P07", "R51"]
nazwy_swiadczen = ["Badanie krwi", "USG", "RTG", "EKG", "Konsultacja specjalistyczna", "Operacja"]Do wygenerowania podstawowego zbioru danych będą potrzebne również daty. W Pythonie praca z datami przy użyciu biblioteki datetime. Odpowiednikiem w R jest pakiet lubridate. W skrócie, importujemy biblioteki, tworzymy datę początkową i końcową i na końcu tworzymy funkcję do generowania losowych dat.
W pierwszym kroku zaimportowane zostały daty początkowe i końcowe w postaci obiektów dat reprezentujących 1 stycznia 2015 roku. Analogicznie stworzono obiekt daty dla 31 grudnia 2020 roku. Następnie z zefiniowano funkcję do generowania losowej daty. Dane dwejściowe do funkcji random_date obejmuja start_date i end_date. Funkcja zwraca nowa datę losowo umieszczoną w granicach start_date oraz end_date.
import datetime
import random
start_date = datetime.date(2015, 1, 1)
end_date = datetime.date(2020, 12, 31)
def random_date(start_date, end_date):
return start_date + (end_date - start_date) * random.random()Możemy tworzyć DataFrame z różnych źródeł, w tym z losowo wygenerowanych danych, co pozwala na praktyczne ćwiczenia z przetwarzaniem i analizą danych. Generowanie danych reprezentujące płeć czy województwa umożliwia testowanie funkcji i oraz trening na danych zgodnych z konstruktem badawczym.
Funkcja random.seed(0) służy do ustawienia początkowego ziarna generatora liczb losowych. Ziarno jest punktem startowym, od którego generator zaczyna tworzyć sekwencję pseudolosowych liczb. Liczby generowane przez random w Pythonie są pseudolosowe, co oznacza, że są one generowane na podstawie ‘zaszytego’ algorytmu i nie są prawdziwie losowe.Używanie tej samej wartości ziarna pozwala na uzyskanie tej samej sekwencji liczb pseudolosowych przy każdym uruchomieniu programu.
#pip install pandas
#Ładowanie bibliotek
import random
import pandas as pd
random.seed(0)
dane = pd.DataFrame({
"id": range(1, n + 1),
"wiek": [random.randint(0, 100)
for _ in range(n)],
"płeć": [random.choice(plec)
for _ in range(n)],
"województwo": [random.choice(wojewodztwa)
for _ in range(n)],
"kod ICD-10": [random.choice(kody_icd_10)
for _ in range(n)],
"data": [random_date(start_date, end_date)
for _ in range(n)],
"nazwa świadczenia": [random.choice(nazwy_swiadczen)
for _ in range(n)],
"koszt świadczenia": [round(random.uniform(100, 1000), 2)
for _ in range(n)],
"zgon": [random.choice(["tak", "nie"])
for _ in range(n)]
})Opis kodu:
Tworzenie Ramki Danych (pd.DataFrame) tworzy nową ramkę danych (DataFrame) za pomocą biblioteki pandas.
Kolumna id generuje sekwencję liczb całkowitych od 1 do n jako identyfikatory (id). n jest zmienną określającą liczbę wierszy, które mają zostać wygenerowane w ramce danych. Stosowanie n + 1 jest standardowym podejściem w Pythonie do zapewnienia, że sekwencja obejmuje również liczbę n.
Kolumna wiek generuje listę losowych liczb całkowitych między 0 a 100 dla każdego wiersza w ramce danych. Używa do tego funkcji randint z modułu random. Zarówno a, jak i b są włączone do zakresu. Oznacza to, że otrzymamy losową liczbę całkowitą gdziekolwiek między 0 a 100, włącznie z obiema tymi wartościam
Kolumna płeć losowo wybiera wartości z listy plec dla każdego wiersza. Lista plec zawiera kategorie płci, np. [“M”, “K”].
Kolumna województwo podobnie losowo wybiera nazwę województwa z listy wojewodztwa dla każdego wiersza.
Kolumna kod ICD-10 losowo wybiera kod ICD-10 z listy kody_icd_10 dla każdego wiersza. Kody ICD-10 są standardową klasyfikacją chorób i problemów zdrowotnych.
Kolumna nazwa świadczenia losowo wybiera nazwę świadczenia zdrowotnego z listy nazwy_swiadczen dla każdego wiersza.
Kolumna koszt świadczenia generuje losową liczbę zmiennoprzecinkową między 100 a 1000, a round(..., 2) zaokrągla ją do dwóch miejsc po przecinku. Jest to powtarzane dla każdego wiersza, tworząc listę kosztów świadczeń.
Kolumna zgon losowo wybiera między wartościami “tak” i “nie” dla każdego wiersza, symulując informacje o zgonie.