Tworzenie danych

Author

zamaro@outlook.com

Published

December 11, 2023


Typy 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


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:

Code
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


Pobieranie i zapisywanie danych

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().

Code
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


Generowanie zbiorów danych


Tworzenie list

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.

Code
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"]


Daty

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.

Code
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()


Tworzenie ramek danych

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.

Code
#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:

  1. Tworzenie Ramki Danych (pd.DataFrame) tworzy nową ramkę danych (DataFrame) za pomocą biblioteki pandas.

  2. 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.

  3. 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

  4. Kolumna płeć losowo wybiera wartości z listy plec dla każdego wiersza. Lista plec zawiera kategorie płci, np. [“M”, “K”].

  5. Kolumna województwo podobnie losowo wybiera nazwę województwa z listy wojewodztwa dla każdego wiersza.

  6. 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.

  7. Kolumna nazwa świadczenia losowo wybiera nazwę świadczenia zdrowotnego z listy nazwy_swiadczen dla każdego wiersza.

  8. 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ń.

  9. Kolumna zgon losowo wybiera między wartościami “tak” i “nie” dla każdego wiersza, symulując informacje o zgonie.