Changes between Version 1 and Version 2 of About


Ignore:
Timestamp:
02/07/26 16:29:01 (23 hours ago)
Author:
185022
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • About

    v1 v2  
     1= Вовед
     2
     3Во рамки на првата фаза, фокусот е ставен на:
     4* генерирање на податоци
     5* креирање на база и табели
     6* пополнување на табелите со реалистични податоци.
     7
     8== Синтетички податоци
     9
     10Поради чувствителноста на здравствените податоци и регулативите за приватност, во проектот не се користат реални пациентски податоци.
     11
     12Наместо тоа, се користат синтетички податоци кои
     13* ја задржуваат статистичката структура на реални податоци
     14* не содржат лични или доверливи информации
     15* се погодни за тестирање и анализа
     16
     17== Synthea алатка
     18
     19[https://github.com/synthetichealth/synthea Synthea] е open-source алатка за генерирање на синтетички здравствени податоци.
     20
     21Алатката генеррира податоци за пациенти, прегледи, дијагнози, терапии и интервенции организирани во CSV формат.
     22
     23Податоците се структурирани така што можат директно да се внесат во релациона база на податоци.
     24
    125= Генерирање на податоци
     26
     27Податоците се генерирани со користење на **Synthea**, при што е симулирана популација од 250 000 пациенти.
    228
    329{{{#!cmd
     
    632
    733= Креирање на табели
     34
     35По генерирањето на CSV датотеките, следен чекор е подготовка на релационата база на податоци.
     36
     37Ова опфаќа:
     38* креирање на база на податоци
     39* дефинирање на табели
     40* избор на соодветни типови на податоци
     41* подготовка за ефикасен увоз на податоци
    842
    943=== Креирање на база на податоци
     
    184218go
    185219}}}
     220
     221= Пополнување на табели
     222
     223Податоците ги увезуваме од CSV датотеки преку staging табели, со цел:
     224* да се овозможи контрола и чистење на податоците
     225* да се избегнат грешки при директен внес на финалните табели
     226* да се овозможи безбедно кастирање на типови (dates, decimals, uniqueidentifier)
     227
     228== Staging табели
     229
     230За секоја финална табела е креирана соодветна staging табела. Во овие табели сите колони се дефинирани како `VARCHAR`, со што:
     231* се избегнуваат грешки при `BULK INSERT`
     232* се овозможува чистење на податоци (отстранување на наводници)
     233* се користи `TRY_CAST` за безбедна конверзија кон финалните типови.
     234
     235Staging табели:
     236* `patients_staging`
     237* `encounters_staging`
     238* `conditions_staging`
     239* `observations_staging`
     240* `medications_staging`
     241* `allergies_staging`
     242* `procedures_staging`
     243* `immunizations_staging`
     244
     245== Процес на увоз на податоци
     246
     247Процесот на пополнување за секоја табела се состои од следните чекори:
     2481. Празнење на staging табелата (truncate).
     2492. `BULK INSERT` од CSV датотека
     2503. Проверка на број на редови во staging табелата
     2514. `INSERT` во финалната табела со `CAST` / `TRY_CAST`
     2525. Проверка на број на редови во финалната табела.
     253
     254=== Пример: Пополнување на табелата Patients
     255
     256Податоците за пациенти се увезуваат од датотеката `patients.csv`.
     257При увозот:
     258* `ID` полињата се конвертираат во `UNIQUEIDENTIFIER`
     259* датумите се конвертираат во `DATE`
     260* нумеричките вредности се конвертираат во `DECIMAL`
     261* се користи `TRY_CAST` за справување со недостасувачки вредности
     262
     263{{{#!sql
     264use HospitalSyntheaDB;
     265go
     266
     267if object_id('dbo.patients_staging') is not null drop table dbo.patients_staging;
     268go
     269
     270create table patients_staging(
     271    id varchar(100), birthdate varchar(50), deathdate varchar(50), ssn varchar(50), drivers varchar(50),
     272    passport varchar(50), prefix varchar(50), first varchar(100), middle varchar(100), last varchar(100),
     273    suffix varchar(50), maiden varchar(100), marital varchar(50), race varchar(50), ethnicity varchar(50),
     274    gender varchar(10), birthplace varchar(200), address varchar(200), city varchar(100), state varchar(50),
     275    county varchar(100), fips varchar(20), zip varchar(20), lat varchar(20), lon varchar(20),
     276    healthcare_expenses varchar(50), healthcare_coverage varchar(50), income varchar(50)
     277);
     278go
     279
     280truncate patients_staging;
     281bulk insert patients_staging
     282from 'C:\Users\user\Documents\DBA\synthea\output\csv\patients.csv'
     283with (fieldterminator = ',', rowterminator = '\n', firstrow = 2, codepage = '65001', tablock);
     284go
     285
     286print 'Patients staging row count:';
     287select count(*) as patients_staging_count from patients_staging;
     288go
     289
     290insert into patients
     291select
     292    cast(replace(id,'"','') as uniqueidentifier),
     293    cast(replace(birthdate,'"','') as date),
     294    try_cast(replace(deathdate,'"','') as date),
     295    replace(ssn,'"',''),
     296    replace(drivers,'"',''),
     297    replace(passport,'"',''),
     298    replace(prefix,'"',''),
     299    replace(first,'"',''),
     300    replace(middle,'"',''),
     301    replace(last,'"',''),
     302    replace(suffix,'"',''),
     303    replace(maiden,'"',''),
     304    replace(marital,'"',''),
     305    replace(race,'"',''),
     306    replace(ethnicity,'"',''),
     307    upper(replace(gender,'"','')),
     308    replace(birthplace,'"',''),
     309    replace(address,'"',''),
     310    replace(city,'"',''),
     311    replace(state,'"',''),
     312    replace(county,'"',''),
     313    replace(fips,'"',''),
     314    replace(zip,'"',''),
     315    try_cast(replace(lat,'"','') as decimal(9,6)),
     316    try_cast(replace(lon,'"','') as decimal(9,6)),
     317    try_cast(replace(healthcare_expenses,'"','') as decimal(18,2)),
     318    try_cast(replace(healthcare_coverage,'"','') as decimal(18,2)),
     319    try_cast(replace(income,'"','') as decimal(18,2))
     320from patients_staging;
     321go
     322
     323print 'Patients final row count:';
     324select count(*) as patients_count from patients;
     325go
     326}}}
     327
     328== Чистење по увоз
     329
     330По успешниот увоз на податоци, staging табелите е бришат.
     331
     332Ова спречува непотребно користење простор и ја задржува базата чиста за понатамошни фази од проектот.
     333
     334{{{#!sql
     335drop table patients_staging;
     336go
     337}}}