diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4032ec7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+.idea
+
+.DS_Store
+
+__pycache__/
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..4d87cdb
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,17 @@
+convert_xml_to_csv:
+ python src/convert_xml_to_csv.py "resources/data-devclub-1.xml" "resources"
+
+create_table:
+ python src/create_table.py "./sql_lite.db" "dev_club"
+
+clean_table:
+ python src/clean_table.py "./sql_lite.db" "dev_club"
+
+csv_to_db:
+ python src/csv_to_db.py "./sql_lite.db" "dev_club" "resources/dev_club.csv"
+
+generate_json:
+ python src/generate_json.py "resources/dev_club.csv" "resources/dev_club.json"
+
+generate_csv_by_nationality:
+ python src/generate_csv_by_nationality.py "resources/data-devclub-1.xml" "resources/by_nationality"
\ No newline at end of file
diff --git a/README.md b/README.md
index b98bf2a..0b8a8c2 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,23 @@
# hackathon-season2
+## How to use
+
+```
+cd hackathon-season2
+
+make convert_xml_to_csv (**แปลงไฟล์ xml เป็น csv ชื่อ dev_club.csv กับ dev_mountain.csv**)
+
+make create_table (**สร้าง database และ table**)
+
+make clean_table (**ลบ data ออกจาก table**)
+
+make csv_to_db (**import dev_club.csv to database**)
+
+make generate_json (**สร้างไฟล์ dev_club.json**)
+
+make generate_csv_by_nationality (**สร้างไฟล์ csv แยกตาม nationality**)
+```
+
## เลข Status จะมีตามนี้ครับ
- 1 = Active
- 2 = Resigned
diff --git a/resources/by_nationality/Australia.csv b/resources/by_nationality/Australia.csv
new file mode 100644
index 0000000..daba0b7
--- /dev/null
+++ b/resources/by_nationality/Australia.csv
@@ -0,0 +1,3 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+61,KGM73NWG1JP,Desirae,Melton,1,1993-11-07,Australia,2013-04-12,Aircraft Maintenance,Airhostess,0,Europe
+76,YWT45VVP7KK,Nathan,Floyd,0,1988-01-04,Australia,2008-10-09,Flight Planning,Steward,3,USA
diff --git a/resources/by_nationality/Austria.csv b/resources/by_nationality/Austria.csv
new file mode 100644
index 0000000..d988e30
--- /dev/null
+++ b/resources/by_nationality/Austria.csv
@@ -0,0 +1,6 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+4,CYB72WYU6UR,Winter,Blair,0,1993-02-14,Austria,2022-03-24,Pilot,Steward,4,Ocenia
+40,JHJ72ODJ7RA,Gregory,Bryant,0,1968-09-14,Austria,2017-01-10,Flight Planning,Pilot,0,Middle East
+47,CQW50GAD3DS,Martin,Payne,1,1961-05-12,Austria,2015-10-07,Pilot,Pilot,4,Ocenia
+48,MKI89CUF6PR,Fuller,Alvarez,0,1988-01-06,Austria,2016-12-30,Flight Attendance,Pilot,4,APAC
+100,WIN16ELU8GN,Orlando,Mayer,0,1961-01-11,Austria,2003-04-07,Pilot,Pilot,0,APAC
diff --git a/resources/by_nationality/Belgium.csv b/resources/by_nationality/Belgium.csv
new file mode 100644
index 0000000..e9c53ea
--- /dev/null
+++ b/resources/by_nationality/Belgium.csv
@@ -0,0 +1,2 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+72,AUY27DLM5FK,Leilani,Moran,0,1996-08-25,Belgium,2005-04-08,Aircraft Maintenance,Airhostess,2,Ocenia
diff --git a/resources/by_nationality/Brazil.csv b/resources/by_nationality/Brazil.csv
new file mode 100644
index 0000000..78732fd
--- /dev/null
+++ b/resources/by_nationality/Brazil.csv
@@ -0,0 +1,4 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+55,JJG71FLY1XR,Paula,Delaney,0,1986-09-18,Brazil,2003-01-29,Aircraft Maintenance,Steward,2,Middle East
+68,GDJ74WSM7LG,Autumn,Page,0,1969-11-01,Brazil,2001-04-24,Aircraft Maintenance,Airhostess,3,Middle East
+98,DOB31QXV4GZ,Moana,Walsh,1,1995-05-03,Brazil,2002-04-21,Pilot,Airhostess,3,Ocenia
diff --git a/resources/by_nationality/China.csv b/resources/by_nationality/China.csv
new file mode 100644
index 0000000..f641d81
--- /dev/null
+++ b/resources/by_nationality/China.csv
@@ -0,0 +1,3 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+31,JBK92QBQ9CF,Kyra,Noel,1,1972-08-25,China,2005-11-27,Flight Attendance,Airhostess,3,Canada
+59,VDF94IVV1UX,Nomlanga,Stout,0,1975-04-03,China,2009-08-06,Flight Planning,Airhostess,0,Canada
diff --git a/resources/by_nationality/Colombia.csv b/resources/by_nationality/Colombia.csv
new file mode 100644
index 0000000..11378ee
--- /dev/null
+++ b/resources/by_nationality/Colombia.csv
@@ -0,0 +1,3 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+22,SOM23XJR5NC,Igor,Ochoa,1,1972-10-11,Colombia,2005-11-02,Flight Planning,Airhostess,4,APAC
+49,PRX53TYM5LT,Macon,Trevino,1,1997-10-01,Colombia,2019-12-17,Flight Planning,Steward,0,Ocenia
diff --git a/resources/by_nationality/Costa Rica.csv b/resources/by_nationality/Costa Rica.csv
new file mode 100644
index 0000000..e5e931d
--- /dev/null
+++ b/resources/by_nationality/Costa Rica.csv
@@ -0,0 +1,6 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+15,MOJ66TSD0LH,Jade,Simmons,1,1961-03-04,Costa Rica,2000-12-24,Aircraft Maintenance,Steward,0,Canada
+19,SYT22ZIA2ZU,Thaddeus,Martinez,1,1975-04-02,Costa Rica,2015-07-11,Flight Attendance,Steward,0,Middle East
+42,QSP69GYO0YK,Rajah,Roach,0,1992-12-13,Costa Rica,2011-05-26,Flight Attendance,Pilot,0,Europe
+44,VTF75CUM7PC,Rhea,Keith,0,2000-06-28,Costa Rica,2010-10-30,Flight Attendance,Airhostess,4,Canada
+62,LYL50VBA1GL,Armando,Moody,1,1989-04-24,Costa Rica,2020-04-15,Flight Planning,Steward,3,USA
diff --git a/resources/by_nationality/France.csv b/resources/by_nationality/France.csv
new file mode 100644
index 0000000..443e2d2
--- /dev/null
+++ b/resources/by_nationality/France.csv
@@ -0,0 +1,2 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+93,UXL43IOW6OV,Honorato,Maxwell,1,1982-03-09,France,2017-02-04,Aircraft Maintenance,Airhostess,1,Europe
diff --git a/resources/by_nationality/Germany.csv b/resources/by_nationality/Germany.csv
new file mode 100644
index 0000000..b69c47e
--- /dev/null
+++ b/resources/by_nationality/Germany.csv
@@ -0,0 +1,5 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+2,CDC87ETW8EQ,Burton,Gallegos,0,1960-09-22,Germany,2021-10-29,Aircraft Maintenance,Pilot,1,APAC
+18,DFE84WHT0ED,Joelle,Boyle,0,1962-07-19,Germany,2013-03-28,Flight Planning,Airhostess,0,Ocenia
+29,CMK62UAD3VK,Rowan,Leonard,1,1974-07-15,Germany,2004-03-27,Aircraft Maintenance,Pilot,1,Ocenia
+69,OOR56TFJ3XV,Nehru,Vargas,1,1976-09-25,Germany,2007-08-27,Flight Attendance,Pilot,2,USA
diff --git a/resources/by_nationality/India.csv b/resources/by_nationality/India.csv
new file mode 100644
index 0000000..b62d91e
--- /dev/null
+++ b/resources/by_nationality/India.csv
@@ -0,0 +1,4 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+20,JDS74VWV5XG,Lester,Edwards,1,1973-10-11,India,2000-09-03,Flight Planning,Airhostess,0,Canada
+21,SMN51EPH5FE,Aline,Riley,0,1989-06-04,India,2001-04-05,Flight Attendance,Pilot,3,APAC
+88,TRJ51LBJ6II,Shaeleigh,Roth,1,1986-02-04,India,2004-03-15,Aircraft Maintenance,Steward,4,Europe
diff --git a/resources/by_nationality/Indonesia.csv b/resources/by_nationality/Indonesia.csv
new file mode 100644
index 0000000..3fdb153
--- /dev/null
+++ b/resources/by_nationality/Indonesia.csv
@@ -0,0 +1,4 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+33,EWD45RJW5YK,Carter,Velasquez,0,1967-11-23,Indonesia,2005-02-27,Flight Planning,Pilot,1,APAC
+84,KMS88HTI5IR,Chanda,Wynn,1,1993-07-10,Indonesia,2014-11-20,Flight Planning,Steward,2,USA
+92,HET44XPQ0RR,Lucy,Finch,1,1975-02-21,Indonesia,2002-05-19,Pilot,Steward,4,Middle East
diff --git a/resources/by_nationality/Ireland.csv b/resources/by_nationality/Ireland.csv
new file mode 100644
index 0000000..64c3f30
--- /dev/null
+++ b/resources/by_nationality/Ireland.csv
@@ -0,0 +1,3 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+37,GWY17TOL2UG,Matthew,Vasquez,1,1995-03-17,Ireland,2007-07-01,Flight Planning,Steward,4,Ocenia
+67,BVY21SKG6CE,Kitra,Green,0,1967-07-10,Ireland,2006-09-12,Flight Planning,Airhostess,0,Middle East
diff --git a/resources/by_nationality/Italy.csv b/resources/by_nationality/Italy.csv
new file mode 100644
index 0000000..9a68d7f
--- /dev/null
+++ b/resources/by_nationality/Italy.csv
@@ -0,0 +1,5 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+34,BFS82MEY3CX,Selma,Bush,0,1972-03-26,Italy,2008-10-10,Flight Attendance,Airhostess,1,USA
+52,THN13DDU7PZ,Kieran,Hancock,1,1976-07-01,Italy,2023-04-14,Flight Planning,Airhostess,0,USA
+78,YHV05IUP6ER,Willa,Ferguson,0,1969-12-10,Italy,2017-07-08,Flight Planning,Steward,3,Ocenia
+80,EUC74ENE9ZK,Ryan,Rush,0,1998-06-13,Italy,2019-07-31,Aircraft Maintenance,Pilot,1,Middle East
diff --git a/resources/by_nationality/Mexico.csv b/resources/by_nationality/Mexico.csv
new file mode 100644
index 0000000..c1b8eb1
--- /dev/null
+++ b/resources/by_nationality/Mexico.csv
@@ -0,0 +1,6 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+7,SBJ34IXU7TC,Madeson,Mcintosh,1,1997-11-03,Mexico,2007-08-22,Flight Attendance,Steward,0,Ocenia
+41,ITS61SWZ4PW,Duncan,Morrison,1,1975-04-24,Mexico,2012-03-01,Flight Planning,Steward,0,Europe
+50,MRC33GHJ2KW,Calvin,Roach,1,1999-04-16,Mexico,2011-03-18,Flight Attendance,Steward,1,Europe
+63,UVV50TVB3TS,Maggy,Miles,0,1972-01-16,Mexico,2015-08-02,Flight Planning,Pilot,3,Ocenia
+74,HJL93JJY5GH,September,Morin,1,1997-09-15,Mexico,2014-08-26,Aircraft Maintenance,Steward,4,APAC
diff --git a/resources/by_nationality/Netherlands.csv b/resources/by_nationality/Netherlands.csv
new file mode 100644
index 0000000..4635ca4
--- /dev/null
+++ b/resources/by_nationality/Netherlands.csv
@@ -0,0 +1,5 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+14,TAP82QBU5PN,Lunea,Sweet,1,1992-10-27,Netherlands,2004-03-15,Pilot,Airhostess,3,Middle East
+23,NFH65BYM0VB,Armand,Horn,0,1987-05-24,Netherlands,2007-06-19,Aircraft Maintenance,Airhostess,1,Ocenia
+32,KUO96QIG4VK,Stephen,Dickson,0,1962-05-02,Netherlands,2013-03-15,Aircraft Maintenance,Airhostess,4,APAC
+71,FSQ47TYA9DJ,Pascale,Silva,0,1968-10-13,Netherlands,2007-09-27,Pilot,Steward,4,Canada
diff --git a/resources/by_nationality/New Zealand.csv b/resources/by_nationality/New Zealand.csv
new file mode 100644
index 0000000..bbe912c
--- /dev/null
+++ b/resources/by_nationality/New Zealand.csv
@@ -0,0 +1,2 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+83,LJK19GHE1TM,Dalton,Roberson,0,1994-05-02,New Zealand,2012-06-21,Aircraft Maintenance,Airhostess,0,Europe
diff --git a/resources/by_nationality/Nigeria.csv b/resources/by_nationality/Nigeria.csv
new file mode 100644
index 0000000..d1b87f8
--- /dev/null
+++ b/resources/by_nationality/Nigeria.csv
@@ -0,0 +1,2 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+85,MUE55VMY6MX,Solomon,Booker,0,1961-03-28,Nigeria,2007-09-18,Aircraft Maintenance,Steward,3,APAC
diff --git a/resources/by_nationality/Norway.csv b/resources/by_nationality/Norway.csv
new file mode 100644
index 0000000..8fd5f58
--- /dev/null
+++ b/resources/by_nationality/Norway.csv
@@ -0,0 +1,3 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+6,KXU40SKR1YO,Simone,Mosley,0,1994-11-20,Norway,2023-03-10,Flight Planning,Steward,2,Canada
+90,MCJ12FYX5KN,Maxine,Branch,1,1979-05-29,Norway,2018-10-17,Pilot,Steward,0,Europe
diff --git a/resources/by_nationality/Pakistan.csv b/resources/by_nationality/Pakistan.csv
new file mode 100644
index 0000000..861e544
--- /dev/null
+++ b/resources/by_nationality/Pakistan.csv
@@ -0,0 +1,5 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+3,JUI65YBK7AF,Jada,Bender,0,1963-05-28,Pakistan,2001-02-11,Pilot,Pilot,1,Canada
+28,VSN53SUD8EA,Lana,Aguirre,1,1979-10-30,Pakistan,2020-09-16,Flight Attendance,Pilot,2,Middle East
+30,WJE55UKG3YU,Clarke,Norman,1,1987-06-15,Pakistan,2022-01-13,Aircraft Maintenance,Steward,3,USA
+99,OUB92IKA7AU,Jonah,Solomon,1,1985-05-25,Pakistan,2023-04-30,Flight Attendance,Pilot,3,Europe
diff --git a/resources/by_nationality/Peru.csv b/resources/by_nationality/Peru.csv
new file mode 100644
index 0000000..f190152
--- /dev/null
+++ b/resources/by_nationality/Peru.csv
@@ -0,0 +1,7 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+36,TLM36YPP3NE,Vera,Ashley,1,1982-06-02,Peru,2022-03-12,Flight Attendance,Pilot,3,Canada
+43,JWF56EYP2AN,Sophia,Fuller,1,1986-01-03,Peru,2012-02-15,Pilot,Steward,0,Europe
+58,TZT98UWC8BW,Donna,Clay,1,1977-12-25,Peru,2003-05-16,Aircraft Maintenance,Steward,4,APAC
+82,ISX87UNW0AD,Herrod,Oliver,0,1965-01-07,Peru,2023-01-16,Flight Attendance,Airhostess,0,Europe
+87,RVO63HMC4NL,Ferris,Gilbert,0,1969-07-24,Peru,2002-12-25,Flight Planning,Steward,4,Europe
+97,SUF73DKV4QE,Dante,Hart,0,1999-12-21,Peru,2016-02-22,Pilot,Pilot,1,Europe
diff --git a/resources/by_nationality/Philippines.csv b/resources/by_nationality/Philippines.csv
new file mode 100644
index 0000000..48011c3
--- /dev/null
+++ b/resources/by_nationality/Philippines.csv
@@ -0,0 +1,6 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+10,YHF52IXT9VG,Lamar,Reeves,1,1988-09-13,Philippines,2003-09-26,Flight Attendance,Pilot,2,Canada
+25,BJQ37WBQ4UL,Leandra,Mayer,0,1974-09-07,Philippines,2019-09-17,Pilot,Steward,0,Europe
+45,MIF51GHC3PF,Walker,Jarvis,0,1988-06-26,Philippines,2004-04-22,Aircraft Maintenance,Pilot,3,Ocenia
+65,UCZ18XLY9OA,Solomon,Estes,0,1968-07-16,Philippines,2014-02-08,Aircraft Maintenance,Airhostess,0,USA
+66,WKV12UQC6QF,Zachery,Valentine,0,1971-06-04,Philippines,2011-08-25,Flight Attendance,Steward,1,Middle East
diff --git a/resources/by_nationality/Russian Federation.csv b/resources/by_nationality/Russian Federation.csv
new file mode 100644
index 0000000..d1de78f
--- /dev/null
+++ b/resources/by_nationality/Russian Federation.csv
@@ -0,0 +1,4 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+26,CCE27MGJ8KI,Chloe,Blanchard,1,1998-12-29,Russian Federation,2001-05-20,Pilot,Steward,2,Middle East
+81,DCD61JXD7UO,Brady,Hernandez,1,1961-11-26,Russian Federation,2022-09-01,Pilot,Airhostess,2,Europe
+96,LJB26BQM6PS,Laith,Whitfield,0,1987-01-14,Russian Federation,2001-02-09,Pilot,Airhostess,0,APAC
diff --git a/resources/by_nationality/Singapore.csv b/resources/by_nationality/Singapore.csv
new file mode 100644
index 0000000..dce68ef
--- /dev/null
+++ b/resources/by_nationality/Singapore.csv
@@ -0,0 +1,4 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+70,RAX87DEX6CC,Ferris,Houston,0,1981-05-01,Singapore,2016-02-23,Pilot,Pilot,3,Canada
+86,WND47SBT6OF,Yardley,Buckley,1,1989-06-24,Singapore,2002-06-04,Flight Attendance,Pilot,3,USA
+95,OUP31WOE2IE,Dara,Wilcox,1,1996-06-29,Singapore,2011-05-18,Flight Attendance,Airhostess,1,Canada
diff --git a/resources/by_nationality/South Africa.csv b/resources/by_nationality/South Africa.csv
new file mode 100644
index 0000000..3401b80
--- /dev/null
+++ b/resources/by_nationality/South Africa.csv
@@ -0,0 +1,4 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+24,EQI56KFP6NU,Chaney,Ramsey,1,1972-06-13,South Africa,2002-12-19,Aircraft Maintenance,Steward,2,USA
+51,BPO49TXH0XX,Charles,Kim,0,1968-12-30,South Africa,2015-09-12,Flight Planning,Pilot,2,Ocenia
+75,KVI04NMS2QH,Shay,Mcdonald,1,1999-12-29,South Africa,2007-03-07,Aircraft Maintenance,Airhostess,4,Ocenia
diff --git a/resources/by_nationality/South Korea.csv b/resources/by_nationality/South Korea.csv
new file mode 100644
index 0000000..5d6edc9
--- /dev/null
+++ b/resources/by_nationality/South Korea.csv
@@ -0,0 +1,3 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+1,OQI75XIE4UX,Christopher,Kennedy,1,1978-02-05,South Korea,2005-02-20,Flight Planning,Steward,2,Europe
+35,XPI62OGX6QX,Roary,Frank,1,1979-12-30,South Korea,2008-11-12,Flight Attendance,Airhostess,2,Middle East
diff --git a/resources/by_nationality/Spain.csv b/resources/by_nationality/Spain.csv
new file mode 100644
index 0000000..8c731f3
--- /dev/null
+++ b/resources/by_nationality/Spain.csv
@@ -0,0 +1,2 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+57,GRE66NCT2EF,Aimee,Stone,0,1990-09-08,Spain,2007-07-25,Flight Attendance,Pilot,3,Middle East
diff --git a/resources/by_nationality/Sweden.csv b/resources/by_nationality/Sweden.csv
new file mode 100644
index 0000000..31d2d21
--- /dev/null
+++ b/resources/by_nationality/Sweden.csv
@@ -0,0 +1,6 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+9,WOW94MLI6CM,Prescott,Dudley,0,1990-04-07,Sweden,2012-11-16,Pilot,Steward,2,Canada
+12,KGM77GAL2UW,Levi,Atkinson,0,1969-10-08,Sweden,2002-09-13,Aircraft Maintenance,Steward,4,Europe
+13,UOM66JXI0ZD,Levi,Myers,0,1998-12-29,Sweden,2004-09-13,Aircraft Maintenance,Steward,0,Europe
+16,WRS57BWI1RG,Serina,Tran,1,1980-11-28,Sweden,2010-07-18,Flight Planning,Steward,2,Canada
+91,WEA16MFX7OE,Drew,Gordon,0,1981-10-31,Sweden,2015-04-19,Aircraft Maintenance,Steward,2,Ocenia
diff --git a/resources/by_nationality/Turkey.csv b/resources/by_nationality/Turkey.csv
new file mode 100644
index 0000000..d32c11a
--- /dev/null
+++ b/resources/by_nationality/Turkey.csv
@@ -0,0 +1,4 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+39,DDI37UIV8QD,Trevor,Wyatt,0,1998-02-14,Turkey,2010-03-15,Pilot,Airhostess,2,USA
+46,ZGJ51FDM2LC,Reese,Christensen,0,1993-09-15,Turkey,2011-08-10,Aircraft Maintenance,Pilot,3,Ocenia
+64,GSW02GPL6OY,Wyoming,Joyner,0,1991-11-20,Turkey,2022-04-17,Flight Attendance,Steward,0,Europe
diff --git a/resources/by_nationality/Ukraine.csv b/resources/by_nationality/Ukraine.csv
new file mode 100644
index 0000000..832d100
--- /dev/null
+++ b/resources/by_nationality/Ukraine.csv
@@ -0,0 +1,3 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+5,AZE20CSG4MU,Lillian,Reese,0,1982-12-03,Ukraine,2002-05-19,Flight Planning,Steward,1,Canada
+94,BVQ96KDP3EL,Darryl,Nichols,1,1988-05-29,Ukraine,2001-02-19,Aircraft Maintenance,Steward,0,USA
diff --git a/resources/by_nationality/United Kingdom.csv b/resources/by_nationality/United Kingdom.csv
new file mode 100644
index 0000000..9e9bf96
--- /dev/null
+++ b/resources/by_nationality/United Kingdom.csv
@@ -0,0 +1,4 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+27,EDF66USR7HP,Anjolie,Dudley,1,1975-12-27,United Kingdom,2004-07-28,Aircraft Maintenance,Steward,0,USA
+53,EKI78MBL1DM,Irene,Moon,0,1973-10-02,United Kingdom,2015-04-21,Flight Attendance,Airhostess,2,USA
+54,ZCM30CQE2UN,Noelani,Watkins,0,1969-08-31,United Kingdom,2016-07-18,Aircraft Maintenance,Airhostess,4,Europe
diff --git a/resources/by_nationality/United States.csv b/resources/by_nationality/United States.csv
new file mode 100644
index 0000000..ecff0bb
--- /dev/null
+++ b/resources/by_nationality/United States.csv
@@ -0,0 +1,5 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+8,UCT91SOT6EN,Josephine,Hansen,1,1982-10-12,United States,2021-12-24,Flight Planning,Pilot,4,Middle East
+17,TZU74JZT1GC,Talon,Santiago,1,1969-04-17,United States,2015-09-02,Aircraft Maintenance,Steward,0,Canada
+73,XIJ68PKR7QT,Darius,Serrano,0,1990-04-29,United States,2005-11-03,Pilot,Steward,4,Middle East
+79,RCQ71JXX4NH,Teagan,Daniel,1,1983-09-02,United States,2005-05-22,Pilot,Steward,0,APAC
diff --git a/resources/by_nationality/Vietnam.csv b/resources/by_nationality/Vietnam.csv
new file mode 100644
index 0000000..eaf996d
--- /dev/null
+++ b/resources/by_nationality/Vietnam.csv
@@ -0,0 +1,7 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+11,LBI65YUK1BG,Hamilton,Duffy,1,1987-11-09,Vietnam,2021-12-31,Aircraft Maintenance,Steward,4,APAC
+38,KMG07QVW7MP,Kylynn,Mullins,0,1979-04-19,Vietnam,2020-11-07,Aircraft Maintenance,Steward,0,Middle East
+56,UWS82URG4LM,Keelie,Crosby,0,1985-07-17,Vietnam,2002-04-01,Flight Planning,Steward,0,USA
+60,IUE46AKB9OH,Yuri,Evans,1,1973-10-05,Vietnam,2022-04-18,Aircraft Maintenance,Airhostess,0,Ocenia
+77,EOP89YXA3YW,Wayne,Bowman,0,1991-03-02,Vietnam,2007-03-28,Aircraft Maintenance,Steward,2,APAC
+89,PHE40UOS0GY,Amanda,Schwartz,1,1983-04-03,Vietnam,2019-08-06,Aircraft Maintenance,Steward,4,APAC
diff --git a/data-devclub-1.xml b/resources/data-devclub-1.xml
similarity index 100%
rename from data-devclub-1.xml
rename to resources/data-devclub-1.xml
diff --git a/resources/dev_club.csv b/resources/dev_club.csv
new file mode 100644
index 0000000..2643c33
--- /dev/null
+++ b/resources/dev_club.csv
@@ -0,0 +1,13 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+3,JUI65YBK7AF,Jada,Bender,0,1963-05-28,Pakistan,2001-02-11,Pilot,Pilot,1,Canada
+5,AZE20CSG4MU,Lillian,Reese,0,1982-12-03,Ukraine,2002-05-19,Flight Planning,Steward,1,Canada
+23,NFH65BYM0VB,Armand,Horn,0,1987-05-24,Netherlands,2007-06-19,Aircraft Maintenance,Airhostess,1,Ocenia
+29,CMK62UAD3VK,Rowan,Leonard,1,1974-07-15,Germany,2004-03-27,Aircraft Maintenance,Pilot,1,Ocenia
+33,EWD45RJW5YK,Carter,Velasquez,0,1967-11-23,Indonesia,2005-02-27,Flight Planning,Pilot,1,APAC
+34,BFS82MEY3CX,Selma,Bush,0,1972-03-26,Italy,2008-10-10,Flight Attendance,Airhostess,1,USA
+50,MRC33GHJ2KW,Calvin,Roach,1,1999-04-16,Mexico,2011-03-18,Flight Attendance,Steward,1,Europe
+66,WKV12UQC6QF,Zachery,Valentine,0,1971-06-04,Philippines,2011-08-25,Flight Attendance,Steward,1,Middle East
+80,EUC74ENE9ZK,Ryan,Rush,0,1998-06-13,Italy,2019-07-31,Aircraft Maintenance,Pilot,1,Middle East
+93,UXL43IOW6OV,Honorato,Maxwell,1,1982-03-09,France,2017-02-04,Aircraft Maintenance,Airhostess,1,Europe
+95,OUP31WOE2IE,Dara,Wilcox,1,1996-06-29,Singapore,2011-05-18,Flight Attendance,Airhostess,1,Canada
+97,SUF73DKV4QE,Dante,Hart,0,1999-12-21,Peru,2016-02-22,Pilot,Pilot,1,Europe
diff --git a/resources/dev_club.json b/resources/dev_club.json
new file mode 100644
index 0000000..94577f5
--- /dev/null
+++ b/resources/dev_club.json
@@ -0,0 +1 @@
+[{"EMPID": "3", "PASSPORT": "JUI65YBK7AF", "FIRSTNAME": "Jada", "LASTNAME": "Bender", "GENDER": "0", "BIRTHDAY": "1963-05-28", "NATIONALITY": "Pakistan", "HIRED": "2001-02-11", "DEPT": "Pilot", "POSITION": "Pilot", "STATUS": "1", "REGION": "Canada"}, {"EMPID": "5", "PASSPORT": "AZE20CSG4MU", "FIRSTNAME": "Lillian", "LASTNAME": "Reese", "GENDER": "0", "BIRTHDAY": "1982-12-03", "NATIONALITY": "Ukraine", "HIRED": "2002-05-19", "DEPT": "Flight Planning", "POSITION": "Steward", "STATUS": "1", "REGION": "Canada"}, {"EMPID": "23", "PASSPORT": "NFH65BYM0VB", "FIRSTNAME": "Armand", "LASTNAME": "Horn", "GENDER": "0", "BIRTHDAY": "1987-05-24", "NATIONALITY": "Netherlands", "HIRED": "2007-06-19", "DEPT": "Aircraft Maintenance", "POSITION": "Airhostess", "STATUS": "1", "REGION": "Ocenia"}, {"EMPID": "29", "PASSPORT": "CMK62UAD3VK", "FIRSTNAME": "Rowan", "LASTNAME": "Leonard", "GENDER": "1", "BIRTHDAY": "1974-07-15", "NATIONALITY": "Germany", "HIRED": "2004-03-27", "DEPT": "Aircraft Maintenance", "POSITION": "Pilot", "STATUS": "1", "REGION": "Ocenia"}, {"EMPID": "33", "PASSPORT": "EWD45RJW5YK", "FIRSTNAME": "Carter", "LASTNAME": "Velasquez", "GENDER": "0", "BIRTHDAY": "1967-11-23", "NATIONALITY": "Indonesia", "HIRED": "2005-02-27", "DEPT": "Flight Planning", "POSITION": "Pilot", "STATUS": "1", "REGION": "APAC"}, {"EMPID": "34", "PASSPORT": "BFS82MEY3CX", "FIRSTNAME": "Selma", "LASTNAME": "Bush", "GENDER": "0", "BIRTHDAY": "1972-03-26", "NATIONALITY": "Italy", "HIRED": "2008-10-10", "DEPT": "Flight Attendance", "POSITION": "Airhostess", "STATUS": "1", "REGION": "USA"}, {"EMPID": "50", "PASSPORT": "MRC33GHJ2KW", "FIRSTNAME": "Calvin", "LASTNAME": "Roach", "GENDER": "1", "BIRTHDAY": "1999-04-16", "NATIONALITY": "Mexico", "HIRED": "2011-03-18", "DEPT": "Flight Attendance", "POSITION": "Steward", "STATUS": "1", "REGION": "Europe"}, {"EMPID": "66", "PASSPORT": "WKV12UQC6QF", "FIRSTNAME": "Zachery", "LASTNAME": "Valentine", "GENDER": "0", "BIRTHDAY": "1971-06-04", "NATIONALITY": "Philippines", "HIRED": "2011-08-25", "DEPT": "Flight Attendance", "POSITION": "Steward", "STATUS": "1", "REGION": "Middle East"}, {"EMPID": "80", "PASSPORT": "EUC74ENE9ZK", "FIRSTNAME": "Ryan", "LASTNAME": "Rush", "GENDER": "0", "BIRTHDAY": "1998-06-13", "NATIONALITY": "Italy", "HIRED": "2019-07-31", "DEPT": "Aircraft Maintenance", "POSITION": "Pilot", "STATUS": "1", "REGION": "Middle East"}, {"EMPID": "93", "PASSPORT": "UXL43IOW6OV", "FIRSTNAME": "Honorato", "LASTNAME": "Maxwell", "GENDER": "1", "BIRTHDAY": "1982-03-09", "NATIONALITY": "France", "HIRED": "2017-02-04", "DEPT": "Aircraft Maintenance", "POSITION": "Airhostess", "STATUS": "1", "REGION": "Europe"}, {"EMPID": "95", "PASSPORT": "OUP31WOE2IE", "FIRSTNAME": "Dara", "LASTNAME": "Wilcox", "GENDER": "1", "BIRTHDAY": "1996-06-29", "NATIONALITY": "Singapore", "HIRED": "2011-05-18", "DEPT": "Flight Attendance", "POSITION": "Airhostess", "STATUS": "1", "REGION": "Canada"}, {"EMPID": "97", "PASSPORT": "SUF73DKV4QE", "FIRSTNAME": "Dante", "LASTNAME": "Hart", "GENDER": "0", "BIRTHDAY": "1999-12-21", "NATIONALITY": "Peru", "HIRED": "2016-02-22", "DEPT": "Pilot", "POSITION": "Pilot", "STATUS": "1", "REGION": "Europe"}]
\ No newline at end of file
diff --git a/resources/dev_mountain.csv b/resources/dev_mountain.csv
new file mode 100644
index 0000000..0ebd382
--- /dev/null
+++ b/resources/dev_mountain.csv
@@ -0,0 +1,89 @@
+EMPID,PASSPORT,FIRSTNAME,LASTNAME,GENDER,BIRTHDAY,NATIONALITY,HIRED,DEPT,POSITION,STATUS,REGION
+1,OQI75XIE4UX,Christopher,Kennedy,1,1978-02-05,South Korea,2005-02-20,Flight Planning,Steward,2,Europe
+2,CDC87ETW8EQ,Burton,Gallegos,0,1960-09-22,Germany,2021-10-29,Aircraft Maintenance,Pilot,1,APAC
+4,CYB72WYU6UR,Winter,Blair,0,1993-02-14,Austria,2022-03-24,Pilot,Steward,4,Ocenia
+6,KXU40SKR1YO,Simone,Mosley,0,1994-11-20,Norway,2023-03-10,Flight Planning,Steward,2,Canada
+7,SBJ34IXU7TC,Madeson,Mcintosh,1,1997-11-03,Mexico,2007-08-22,Flight Attendance,Steward,0,Ocenia
+8,UCT91SOT6EN,Josephine,Hansen,1,1982-10-12,United States,2021-12-24,Flight Planning,Pilot,4,Middle East
+9,WOW94MLI6CM,Prescott,Dudley,0,1990-04-07,Sweden,2012-11-16,Pilot,Steward,2,Canada
+10,YHF52IXT9VG,Lamar,Reeves,1,1988-09-13,Philippines,2003-09-26,Flight Attendance,Pilot,2,Canada
+11,LBI65YUK1BG,Hamilton,Duffy,1,1987-11-09,Vietnam,2021-12-31,Aircraft Maintenance,Steward,4,APAC
+12,KGM77GAL2UW,Levi,Atkinson,0,1969-10-08,Sweden,2002-09-13,Aircraft Maintenance,Steward,4,Europe
+13,UOM66JXI0ZD,Levi,Myers,0,1998-12-29,Sweden,2004-09-13,Aircraft Maintenance,Steward,0,Europe
+14,TAP82QBU5PN,Lunea,Sweet,1,1992-10-27,Netherlands,2004-03-15,Pilot,Airhostess,3,Middle East
+15,MOJ66TSD0LH,Jade,Simmons,1,1961-03-04,Costa Rica,2000-12-24,Aircraft Maintenance,Steward,0,Canada
+16,WRS57BWI1RG,Serina,Tran,1,1980-11-28,Sweden,2010-07-18,Flight Planning,Steward,2,Canada
+17,TZU74JZT1GC,Talon,Santiago,1,1969-04-17,United States,2015-09-02,Aircraft Maintenance,Steward,0,Canada
+18,DFE84WHT0ED,Joelle,Boyle,0,1962-07-19,Germany,2013-03-28,Flight Planning,Airhostess,0,Ocenia
+19,SYT22ZIA2ZU,Thaddeus,Martinez,1,1975-04-02,Costa Rica,2015-07-11,Flight Attendance,Steward,0,Middle East
+20,JDS74VWV5XG,Lester,Edwards,1,1973-10-11,India,2000-09-03,Flight Planning,Airhostess,0,Canada
+21,SMN51EPH5FE,Aline,Riley,0,1989-06-04,India,2001-04-05,Flight Attendance,Pilot,3,APAC
+22,SOM23XJR5NC,Igor,Ochoa,1,1972-10-11,Colombia,2005-11-02,Flight Planning,Airhostess,4,APAC
+24,EQI56KFP6NU,Chaney,Ramsey,1,1972-06-13,South Africa,2002-12-19,Aircraft Maintenance,Steward,2,USA
+25,BJQ37WBQ4UL,Leandra,Mayer,0,1974-09-07,Philippines,2019-09-17,Pilot,Steward,0,Europe
+26,CCE27MGJ8KI,Chloe,Blanchard,1,1998-12-29,Russian Federation,2001-05-20,Pilot,Steward,2,Middle East
+27,EDF66USR7HP,Anjolie,Dudley,1,1975-12-27,United Kingdom,2004-07-28,Aircraft Maintenance,Steward,0,USA
+28,VSN53SUD8EA,Lana,Aguirre,1,1979-10-30,Pakistan,2020-09-16,Flight Attendance,Pilot,2,Middle East
+30,WJE55UKG3YU,Clarke,Norman,1,1987-06-15,Pakistan,2022-01-13,Aircraft Maintenance,Steward,3,USA
+31,JBK92QBQ9CF,Kyra,Noel,1,1972-08-25,China,2005-11-27,Flight Attendance,Airhostess,3,Canada
+32,KUO96QIG4VK,Stephen,Dickson,0,1962-05-02,Netherlands,2013-03-15,Aircraft Maintenance,Airhostess,4,APAC
+35,XPI62OGX6QX,Roary,Frank,1,1979-12-30,South Korea,2008-11-12,Flight Attendance,Airhostess,2,Middle East
+36,TLM36YPP3NE,Vera,Ashley,1,1982-06-02,Peru,2022-03-12,Flight Attendance,Pilot,3,Canada
+37,GWY17TOL2UG,Matthew,Vasquez,1,1995-03-17,Ireland,2007-07-01,Flight Planning,Steward,4,Ocenia
+38,KMG07QVW7MP,Kylynn,Mullins,0,1979-04-19,Vietnam,2020-11-07,Aircraft Maintenance,Steward,0,Middle East
+39,DDI37UIV8QD,Trevor,Wyatt,0,1998-02-14,Turkey,2010-03-15,Pilot,Airhostess,2,USA
+40,JHJ72ODJ7RA,Gregory,Bryant,0,1968-09-14,Austria,2017-01-10,Flight Planning,Pilot,0,Middle East
+41,ITS61SWZ4PW,Duncan,Morrison,1,1975-04-24,Mexico,2012-03-01,Flight Planning,Steward,0,Europe
+42,QSP69GYO0YK,Rajah,Roach,0,1992-12-13,Costa Rica,2011-05-26,Flight Attendance,Pilot,0,Europe
+43,JWF56EYP2AN,Sophia,Fuller,1,1986-01-03,Peru,2012-02-15,Pilot,Steward,0,Europe
+44,VTF75CUM7PC,Rhea,Keith,0,2000-06-28,Costa Rica,2010-10-30,Flight Attendance,Airhostess,4,Canada
+45,MIF51GHC3PF,Walker,Jarvis,0,1988-06-26,Philippines,2004-04-22,Aircraft Maintenance,Pilot,3,Ocenia
+46,ZGJ51FDM2LC,Reese,Christensen,0,1993-09-15,Turkey,2011-08-10,Aircraft Maintenance,Pilot,3,Ocenia
+47,CQW50GAD3DS,Martin,Payne,1,1961-05-12,Austria,2015-10-07,Pilot,Pilot,4,Ocenia
+48,MKI89CUF6PR,Fuller,Alvarez,0,1988-01-06,Austria,2016-12-30,Flight Attendance,Pilot,4,APAC
+49,PRX53TYM5LT,Macon,Trevino,1,1997-10-01,Colombia,2019-12-17,Flight Planning,Steward,0,Ocenia
+51,BPO49TXH0XX,Charles,Kim,0,1968-12-30,South Africa,2015-09-12,Flight Planning,Pilot,2,Ocenia
+52,THN13DDU7PZ,Kieran,Hancock,1,1976-07-01,Italy,2023-04-14,Flight Planning,Airhostess,0,USA
+53,EKI78MBL1DM,Irene,Moon,0,1973-10-02,United Kingdom,2015-04-21,Flight Attendance,Airhostess,2,USA
+54,ZCM30CQE2UN,Noelani,Watkins,0,1969-08-31,United Kingdom,2016-07-18,Aircraft Maintenance,Airhostess,4,Europe
+55,JJG71FLY1XR,Paula,Delaney,0,1986-09-18,Brazil,2003-01-29,Aircraft Maintenance,Steward,2,Middle East
+56,UWS82URG4LM,Keelie,Crosby,0,1985-07-17,Vietnam,2002-04-01,Flight Planning,Steward,0,USA
+57,GRE66NCT2EF,Aimee,Stone,0,1990-09-08,Spain,2007-07-25,Flight Attendance,Pilot,3,Middle East
+58,TZT98UWC8BW,Donna,Clay,1,1977-12-25,Peru,2003-05-16,Aircraft Maintenance,Steward,4,APAC
+59,VDF94IVV1UX,Nomlanga,Stout,0,1975-04-03,China,2009-08-06,Flight Planning,Airhostess,0,Canada
+60,IUE46AKB9OH,Yuri,Evans,1,1973-10-05,Vietnam,2022-04-18,Aircraft Maintenance,Airhostess,0,Ocenia
+61,KGM73NWG1JP,Desirae,Melton,1,1993-11-07,Australia,2013-04-12,Aircraft Maintenance,Airhostess,0,Europe
+62,LYL50VBA1GL,Armando,Moody,1,1989-04-24,Costa Rica,2020-04-15,Flight Planning,Steward,3,USA
+63,UVV50TVB3TS,Maggy,Miles,0,1972-01-16,Mexico,2015-08-02,Flight Planning,Pilot,3,Ocenia
+64,GSW02GPL6OY,Wyoming,Joyner,0,1991-11-20,Turkey,2022-04-17,Flight Attendance,Steward,0,Europe
+65,UCZ18XLY9OA,Solomon,Estes,0,1968-07-16,Philippines,2014-02-08,Aircraft Maintenance,Airhostess,0,USA
+67,BVY21SKG6CE,Kitra,Green,0,1967-07-10,Ireland,2006-09-12,Flight Planning,Airhostess,0,Middle East
+68,GDJ74WSM7LG,Autumn,Page,0,1969-11-01,Brazil,2001-04-24,Aircraft Maintenance,Airhostess,3,Middle East
+69,OOR56TFJ3XV,Nehru,Vargas,1,1976-09-25,Germany,2007-08-27,Flight Attendance,Pilot,2,USA
+70,RAX87DEX6CC,Ferris,Houston,0,1981-05-01,Singapore,2016-02-23,Pilot,Pilot,3,Canada
+71,FSQ47TYA9DJ,Pascale,Silva,0,1968-10-13,Netherlands,2007-09-27,Pilot,Steward,4,Canada
+72,AUY27DLM5FK,Leilani,Moran,0,1996-08-25,Belgium,2005-04-08,Aircraft Maintenance,Airhostess,2,Ocenia
+73,XIJ68PKR7QT,Darius,Serrano,0,1990-04-29,United States,2005-11-03,Pilot,Steward,4,Middle East
+74,HJL93JJY5GH,September,Morin,1,1997-09-15,Mexico,2014-08-26,Aircraft Maintenance,Steward,4,APAC
+75,KVI04NMS2QH,Shay,Mcdonald,1,1999-12-29,South Africa,2007-03-07,Aircraft Maintenance,Airhostess,4,Ocenia
+76,YWT45VVP7KK,Nathan,Floyd,0,1988-01-04,Australia,2008-10-09,Flight Planning,Steward,3,USA
+77,EOP89YXA3YW,Wayne,Bowman,0,1991-03-02,Vietnam,2007-03-28,Aircraft Maintenance,Steward,2,APAC
+78,YHV05IUP6ER,Willa,Ferguson,0,1969-12-10,Italy,2017-07-08,Flight Planning,Steward,3,Ocenia
+79,RCQ71JXX4NH,Teagan,Daniel,1,1983-09-02,United States,2005-05-22,Pilot,Steward,0,APAC
+81,DCD61JXD7UO,Brady,Hernandez,1,1961-11-26,Russian Federation,2022-09-01,Pilot,Airhostess,2,Europe
+82,ISX87UNW0AD,Herrod,Oliver,0,1965-01-07,Peru,2023-01-16,Flight Attendance,Airhostess,0,Europe
+83,LJK19GHE1TM,Dalton,Roberson,0,1994-05-02,New Zealand,2012-06-21,Aircraft Maintenance,Airhostess,0,Europe
+84,KMS88HTI5IR,Chanda,Wynn,1,1993-07-10,Indonesia,2014-11-20,Flight Planning,Steward,2,USA
+85,MUE55VMY6MX,Solomon,Booker,0,1961-03-28,Nigeria,2007-09-18,Aircraft Maintenance,Steward,3,APAC
+86,WND47SBT6OF,Yardley,Buckley,1,1989-06-24,Singapore,2002-06-04,Flight Attendance,Pilot,3,USA
+87,RVO63HMC4NL,Ferris,Gilbert,0,1969-07-24,Peru,2002-12-25,Flight Planning,Steward,4,Europe
+88,TRJ51LBJ6II,Shaeleigh,Roth,1,1986-02-04,India,2004-03-15,Aircraft Maintenance,Steward,4,Europe
+89,PHE40UOS0GY,Amanda,Schwartz,1,1983-04-03,Vietnam,2019-08-06,Aircraft Maintenance,Steward,4,APAC
+90,MCJ12FYX5KN,Maxine,Branch,1,1979-05-29,Norway,2018-10-17,Pilot,Steward,0,Europe
+91,WEA16MFX7OE,Drew,Gordon,0,1981-10-31,Sweden,2015-04-19,Aircraft Maintenance,Steward,2,Ocenia
+92,HET44XPQ0RR,Lucy,Finch,1,1975-02-21,Indonesia,2002-05-19,Pilot,Steward,4,Middle East
+94,BVQ96KDP3EL,Darryl,Nichols,1,1988-05-29,Ukraine,2001-02-19,Aircraft Maintenance,Steward,0,USA
+96,LJB26BQM6PS,Laith,Whitfield,0,1987-01-14,Russian Federation,2001-02-09,Pilot,Airhostess,0,APAC
+98,DOB31QXV4GZ,Moana,Walsh,1,1995-05-03,Brazil,2002-04-21,Pilot,Airhostess,3,Ocenia
+99,OUB92IKA7AU,Jonah,Solomon,1,1985-05-25,Pakistan,2023-04-30,Flight Attendance,Pilot,3,Europe
+100,WIN16ELU8GN,Orlando,Mayer,0,1961-01-11,Austria,2003-04-07,Pilot,Pilot,0,APAC
diff --git a/scripts/query_by_department.sql b/scripts/query_by_department.sql
new file mode 100644
index 0000000..4c90c88
--- /dev/null
+++ b/scripts/query_by_department.sql
@@ -0,0 +1 @@
+SELECT * FROM dev_club WHERE DEPT = 'Flight Attendance';
\ No newline at end of file
diff --git a/scripts/query_by_nationality.sql b/scripts/query_by_nationality.sql
new file mode 100644
index 0000000..446485a
--- /dev/null
+++ b/scripts/query_by_nationality.sql
@@ -0,0 +1 @@
+SELECT * FROM dev_club WHERE NATIONALITY = 'Italy';
\ No newline at end of file
diff --git a/scripts/query_by_region.sql b/scripts/query_by_region.sql
new file mode 100644
index 0000000..49f4ce9
--- /dev/null
+++ b/scripts/query_by_region.sql
@@ -0,0 +1 @@
+SELECT * FROM dev_club WHERE REGION = 'Italy';
\ No newline at end of file
diff --git a/sql_lite.db b/sql_lite.db
new file mode 100644
index 0000000..0a5986e
Binary files /dev/null and b/sql_lite.db differ
diff --git a/src/__init__.py b/src/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/src/clean_table.py b/src/clean_table.py
new file mode 100644
index 0000000..e645f13
--- /dev/null
+++ b/src/clean_table.py
@@ -0,0 +1,27 @@
+import sqlite3
+import sys
+
+
+def clean_table(database_name: str, table_name: str):
+ try:
+ sqlite_connection = sqlite3.connect(database_name)
+ cursor = sqlite_connection.cursor()
+ print("connect success")
+ cursor.execute(f'''DELETE FROM {table_name}''')
+ sqlite_connection.commit()
+ cursor.close()
+
+ except sqlite3.Error as error:
+ print("delete data failed", error)
+
+ finally:
+ if sqlite_connection:
+ sqlite_connection.close()
+ print("database.close")
+
+
+if __name__ == "__main__":
+ if len(sys.argv) == 3:
+ clean_table(database_name=sys.argv[1], table_name=sys.argv[2])
+ else:
+ print("Please insert param")
diff --git a/src/convert_xml_to_csv.py b/src/convert_xml_to_csv.py
new file mode 100644
index 0000000..7f8039b
--- /dev/null
+++ b/src/convert_xml_to_csv.py
@@ -0,0 +1,80 @@
+import csv
+import sys
+import xml.etree.ElementTree as ET
+from datetime import datetime
+from typing import List
+
+
+def check_leap_year(year: int):
+ if year % 400 == 0 or year % 100 != 0 and year % 4 == 0:
+ return True
+ else:
+ return False
+
+
+def check_hired_greater_than_3year(hired_str: str):
+ hired = datetime.strptime(hired_str, "%Y-%m-%d")
+ current = datetime.now()
+ diff_year = current.year - hired.year
+ if diff_year >= 3:
+ return True
+
+ days_per_month = 366 / 12 if check_leap_year(hired.year) else 365 / 12
+ current_days = (days_per_month * current.month) + current.day
+ hired_days = (days_per_month * hired.month) + hired.day
+ if current_days - hired_days == 0:
+ return True
+
+ return False
+
+
+def read_xml_to_list_of_dict(path: str) -> tuple[List[dict], List[dict]]:
+ tree = ET.parse(path)
+ root = tree.getroot()
+ dev_mountain = []
+ dev_club = []
+ for child in root.iter('record'):
+ row = {}
+ for elem in child.iter():
+ if elem.tag == "record":
+ continue
+
+ if elem.tag == "BIRTHDAY" or elem.tag == "HIRED":
+ row[elem.tag] = datetime.strptime(elem.text, "%d-%m-%Y").strftime("%Y-%m-%d")
+ continue
+
+ row[elem.tag] = elem.text
+ if check_hired_greater_than_3year(row["HIRED"]) \
+ and row["POSITION"] in ["Airhostess", "Pilot", "Steward"] \
+ and row["STATUS"] == "1" \
+ and row["GENDER"] in ["0", "1"]:
+ dev_club.append(row)
+ continue
+
+ if row["STATUS"] not in ["1", "2", "3"] and row["GENDER"] not in ["0", "1"]:
+ continue
+
+ dev_mountain.append(row)
+ return dev_mountain, dev_club
+
+
+def convert_xml_to_csv(input_file_path: str, output_folder: str):
+ dev_mountain, dev_club = read_xml_to_list_of_dict(input_file_path)
+ columns = dev_mountain[0].keys()
+ with open(f'{output_folder}/dev_mountain.csv', 'w', newline='') as output_file:
+ dict_writer = csv.DictWriter(output_file, columns)
+ dict_writer.writeheader()
+ dict_writer.writerows(dev_mountain)
+
+ columns = dev_club[0].keys()
+ with open(f'{output_folder}/dev_club.csv', 'w', newline='') as output_file:
+ dict_writer = csv.DictWriter(output_file, columns)
+ dict_writer.writeheader()
+ dict_writer.writerows(dev_club)
+
+
+if __name__ == "__main__":
+ if len(sys.argv) == 3:
+ convert_xml_to_csv(input_file_path=sys.argv[1], output_folder=sys.argv[2])
+ else:
+ print("Please insert param")
diff --git a/src/create_table.py b/src/create_table.py
new file mode 100644
index 0000000..cae1e33
--- /dev/null
+++ b/src/create_table.py
@@ -0,0 +1,31 @@
+import sqlite3
+import sys
+
+
+def create_table(database_name: str, table_name: str):
+ try:
+ sqlite_connection = sqlite3.connect(database_name)
+ cursor = sqlite_connection.cursor()
+ print("connect success")
+ cursor.execute(f'''CREATE TABLE IF NOT EXISTS {table_name}
+ (EMPID INT, PASSPORT TEXT, FIRSTNAME TEXT, LASTNAME TEXT,
+ GENDER INT, BIRTHDAY TEXT, NATIONALITY TEXT, HIRED TEXT,
+ DEPT TEXT, POSITION TEXT, STATUS INT, REGION TEXT)''')
+ sqlite_connection.commit()
+ cursor.close()
+
+ except sqlite3.Error as error:
+ print("create table failed", error)
+
+ finally:
+ if sqlite_connection:
+ sqlite_connection.close()
+ print("database.close")
+
+
+if __name__ == "__main__":
+ if len(sys.argv) == 3:
+ create_table(database_name=sys.argv[1], table_name=sys.argv[2])
+ else:
+ print("Please insert param")
+
diff --git a/src/csv_to_db.py b/src/csv_to_db.py
new file mode 100644
index 0000000..2e6f615
--- /dev/null
+++ b/src/csv_to_db.py
@@ -0,0 +1,39 @@
+import csv
+import sqlite3
+import sys
+from typing import List
+
+
+def insert_data(database_name: str, table_name: str, data: List[dict]):
+ try:
+ sqlite_connection = sqlite3.connect(database_name)
+ cursor = sqlite_connection.cursor()
+ print("connect success")
+ for val in data:
+ sqlite_insert_query = f"""INSERT INTO {table_name}
+ (EMPID, PASSPORT, FIRSTNAME, LASTNAME, GENDER, BIRTHDAY,
+ NATIONALITY, HIRED, DEPT, POSITION, STATUS, REGION)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"""
+ count = cursor.execute(sqlite_insert_query, tuple(val.values()))
+ sqlite_connection.commit()
+ print("insert success", count)
+ cursor.close()
+ except sqlite3.Error as error:
+ print("insert failed", error)
+ finally:
+ if sqlite_connection:
+ sqlite_connection.close()
+ print("database.close")
+
+
+def csv_to_sqlite(database_name: str, table_name: str, path: str):
+ with open(path) as f:
+ data = [{k: v for k, v in row.items()} for row in csv.DictReader(f, skipinitialspace=True)]
+ insert_data(database_name, table_name, data)
+
+
+if __name__ == "__main__":
+ if len(sys.argv) == 4:
+ csv_to_sqlite(database_name=sys.argv[1], table_name=sys.argv[2], path=sys.argv[3])
+ else:
+ print("Please insert param")
diff --git a/src/generate_csv_by_nationality.py b/src/generate_csv_by_nationality.py
new file mode 100644
index 0000000..e2f88e9
--- /dev/null
+++ b/src/generate_csv_by_nationality.py
@@ -0,0 +1,50 @@
+import csv
+import sys
+import xml.etree.ElementTree as ET
+from datetime import datetime
+from itertools import groupby
+from typing import List
+
+
+def read_xml_to_list_of_dict(path: str) -> List[dict]:
+ tree = ET.parse(path)
+ root = tree.getroot()
+ data = []
+ for child in root.iter('record'):
+ row = {}
+ for elem in child.iter():
+ if elem.tag == "record":
+ continue
+
+ if elem.tag == "BIRTHDAY" or elem.tag == "HIRED":
+ row[elem.tag] = datetime.strptime(elem.text, "%d-%m-%Y").strftime("%Y-%m-%d")
+ continue
+
+ row[elem.tag] = elem.text
+
+ if row["STATUS"] not in ["1", "2", "3"] and row["GENDER"] not in ["0", "1"]:
+ continue
+
+ data.append(row)
+ return data
+
+
+def generate_csv_by_nationality(input_file_path: str, output_folder: str):
+ obj = read_xml_to_list_of_dict(input_file_path)
+ obj.sort(key=lambda x: x['NATIONALITY'])
+
+ for key, val in groupby(obj, key=lambda x: x['NATIONALITY']):
+ contents = list(val)
+
+ columns = contents[0].keys()
+ with open(f'{output_folder}/{key}.csv', 'w', newline='') as output_file:
+ dict_writer = csv.DictWriter(output_file, columns)
+ dict_writer.writeheader()
+ dict_writer.writerows(contents)
+
+
+if __name__ == "__main__":
+ if len(sys.argv) == 3:
+ generate_csv_by_nationality(input_file_path=sys.argv[1], output_folder=sys.argv[2])
+ else:
+ print("Please insert param")
diff --git a/src/generate_json.py b/src/generate_json.py
new file mode 100644
index 0000000..2a230e3
--- /dev/null
+++ b/src/generate_json.py
@@ -0,0 +1,17 @@
+import csv
+import json
+import sys
+
+
+def generate_json(path: str, json_file_name: str):
+ with open(path) as csv_file:
+ data = [{key: val for key, val in row.items()} for row in csv.DictReader(csv_file, skipinitialspace=True)]
+ with open(json_file_name, "w") as json_file:
+ json.dump(data, json_file)
+
+
+if __name__ == "__main__":
+ if len(sys.argv) == 3:
+ generate_json(path=sys.argv[1], json_file_name=sys.argv[2])
+ else:
+ print("Please insert param")
diff --git a/visualize_dev_club.ipynb b/visualize_dev_club.ipynb
new file mode 100644
index 0000000..eb7c16f
--- /dev/null
+++ b/visualize_dev_club.ipynb
@@ -0,0 +1,490 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "import matplotlib.pyplot as plt\n",
+ "import seaborn as sns\n",
+ "from datetime import datetime\n",
+ "from time import strptime"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df = pd.read_csv(\"/Users/isky/Documents/GitHub/hackathon-season2/playground/dev_club.csv\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df.columns = df.columns.str.lower()\n",
+ "df['position'] = df['position'].str.lower()\n",
+ "df['dept'] = df['dept'].str.lower()\n",
+ "df['gender'] = df['gender'].replace(0, 'male').replace(1, \"female\")\n",
+ "df['hired_year'] = df['hired'].map(lambda x: datetime.strptime(x,'%Y-%m-%d').year)\n",
+ "df['hired_dt'] = df['hired'].map(lambda x: datetime.strptime(x,'%Y-%m-%d'))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " empid | \n",
+ " passport | \n",
+ " firstname | \n",
+ " lastname | \n",
+ " gender | \n",
+ " birthday | \n",
+ " nationality | \n",
+ " hired | \n",
+ " dept | \n",
+ " position | \n",
+ " status | \n",
+ " region | \n",
+ " age | \n",
+ " hired_age | \n",
+ " hired_year | \n",
+ " hired_dt | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 3 | \n",
+ " JUI65YBK7AF | \n",
+ " Jada | \n",
+ " Bender | \n",
+ " male | \n",
+ " 1963-05-28 | \n",
+ " Pakistan | \n",
+ " 2001-02-11 | \n",
+ " pilot | \n",
+ " pilot | \n",
+ " 1 | \n",
+ " Canada | \n",
+ " 59 | \n",
+ " 21 | \n",
+ " 2001 | \n",
+ " 2001-02-11 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 5 | \n",
+ " AZE20CSG4MU | \n",
+ " Lillian | \n",
+ " Reese | \n",
+ " male | \n",
+ " 1982-12-03 | \n",
+ " Ukraine | \n",
+ " 2002-05-19 | \n",
+ " flight planning | \n",
+ " steward | \n",
+ " 1 | \n",
+ " Canada | \n",
+ " 39 | \n",
+ " 20 | \n",
+ " 2002 | \n",
+ " 2002-05-19 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 23 | \n",
+ " NFH65BYM0VB | \n",
+ " Armand | \n",
+ " Horn | \n",
+ " male | \n",
+ " 1987-05-24 | \n",
+ " Netherlands | \n",
+ " 2007-06-19 | \n",
+ " aircraft maintenance | \n",
+ " airhostess | \n",
+ " 1 | \n",
+ " Ocenia | \n",
+ " 35 | \n",
+ " 15 | \n",
+ " 2007 | \n",
+ " 2007-06-19 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 29 | \n",
+ " CMK62UAD3VK | \n",
+ " Rowan | \n",
+ " Leonard | \n",
+ " female | \n",
+ " 1974-07-15 | \n",
+ " Germany | \n",
+ " 2004-03-27 | \n",
+ " aircraft maintenance | \n",
+ " pilot | \n",
+ " 1 | \n",
+ " Ocenia | \n",
+ " 48 | \n",
+ " 18 | \n",
+ " 2004 | \n",
+ " 2004-03-27 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 33 | \n",
+ " EWD45RJW5YK | \n",
+ " Carter | \n",
+ " Velasquez | \n",
+ " male | \n",
+ " 1967-11-23 | \n",
+ " Indonesia | \n",
+ " 2005-02-27 | \n",
+ " flight planning | \n",
+ " pilot | \n",
+ " 1 | \n",
+ " APAC | \n",
+ " 54 | \n",
+ " 17 | \n",
+ " 2005 | \n",
+ " 2005-02-27 | \n",
+ "
\n",
+ " \n",
+ " 5 | \n",
+ " 34 | \n",
+ " BFS82MEY3CX | \n",
+ " Selma | \n",
+ " Bush | \n",
+ " male | \n",
+ " 1972-03-26 | \n",
+ " Italy | \n",
+ " 2008-10-10 | \n",
+ " flight attendance | \n",
+ " airhostess | \n",
+ " 1 | \n",
+ " USA | \n",
+ " 50 | \n",
+ " 13 | \n",
+ " 2008 | \n",
+ " 2008-10-10 | \n",
+ "
\n",
+ " \n",
+ " 6 | \n",
+ " 50 | \n",
+ " MRC33GHJ2KW | \n",
+ " Calvin | \n",
+ " Roach | \n",
+ " female | \n",
+ " 1999-04-16 | \n",
+ " Mexico | \n",
+ " 2011-03-18 | \n",
+ " flight attendance | \n",
+ " steward | \n",
+ " 1 | \n",
+ " Europe | \n",
+ " 23 | \n",
+ " 11 | \n",
+ " 2011 | \n",
+ " 2011-03-18 | \n",
+ "
\n",
+ " \n",
+ " 7 | \n",
+ " 66 | \n",
+ " WKV12UQC6QF | \n",
+ " Zachery | \n",
+ " Valentine | \n",
+ " male | \n",
+ " 1971-06-04 | \n",
+ " Philippines | \n",
+ " 2011-08-25 | \n",
+ " flight attendance | \n",
+ " steward | \n",
+ " 1 | \n",
+ " Middle East | \n",
+ " 51 | \n",
+ " 11 | \n",
+ " 2011 | \n",
+ " 2011-08-25 | \n",
+ "
\n",
+ " \n",
+ " 8 | \n",
+ " 80 | \n",
+ " EUC74ENE9ZK | \n",
+ " Ryan | \n",
+ " Rush | \n",
+ " male | \n",
+ " 1998-06-13 | \n",
+ " Italy | \n",
+ " 2019-07-31 | \n",
+ " aircraft maintenance | \n",
+ " pilot | \n",
+ " 1 | \n",
+ " Middle East | \n",
+ " 24 | \n",
+ " 3 | \n",
+ " 2019 | \n",
+ " 2019-07-31 | \n",
+ "
\n",
+ " \n",
+ " 9 | \n",
+ " 93 | \n",
+ " UXL43IOW6OV | \n",
+ " Honorato | \n",
+ " Maxwell | \n",
+ " female | \n",
+ " 1982-03-09 | \n",
+ " France | \n",
+ " 2017-02-04 | \n",
+ " aircraft maintenance | \n",
+ " airhostess | \n",
+ " 1 | \n",
+ " Europe | \n",
+ " 40 | \n",
+ " 5 | \n",
+ " 2017 | \n",
+ " 2017-02-04 | \n",
+ "
\n",
+ " \n",
+ " 10 | \n",
+ " 95 | \n",
+ " OUP31WOE2IE | \n",
+ " Dara | \n",
+ " Wilcox | \n",
+ " female | \n",
+ " 1996-06-29 | \n",
+ " Singapore | \n",
+ " 2011-05-18 | \n",
+ " flight attendance | \n",
+ " airhostess | \n",
+ " 1 | \n",
+ " Canada | \n",
+ " 26 | \n",
+ " 11 | \n",
+ " 2011 | \n",
+ " 2011-05-18 | \n",
+ "
\n",
+ " \n",
+ " 11 | \n",
+ " 97 | \n",
+ " SUF73DKV4QE | \n",
+ " Dante | \n",
+ " Hart | \n",
+ " male | \n",
+ " 1999-12-21 | \n",
+ " Peru | \n",
+ " 2016-02-22 | \n",
+ " pilot | \n",
+ " pilot | \n",
+ " 1 | \n",
+ " Europe | \n",
+ " 22 | \n",
+ " 6 | \n",
+ " 2016 | \n",
+ " 2016-02-22 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " empid passport firstname lastname gender birthday nationality \\\n",
+ "0 3 JUI65YBK7AF Jada Bender male 1963-05-28 Pakistan \n",
+ "1 5 AZE20CSG4MU Lillian Reese male 1982-12-03 Ukraine \n",
+ "2 23 NFH65BYM0VB Armand Horn male 1987-05-24 Netherlands \n",
+ "3 29 CMK62UAD3VK Rowan Leonard female 1974-07-15 Germany \n",
+ "4 33 EWD45RJW5YK Carter Velasquez male 1967-11-23 Indonesia \n",
+ "5 34 BFS82MEY3CX Selma Bush male 1972-03-26 Italy \n",
+ "6 50 MRC33GHJ2KW Calvin Roach female 1999-04-16 Mexico \n",
+ "7 66 WKV12UQC6QF Zachery Valentine male 1971-06-04 Philippines \n",
+ "8 80 EUC74ENE9ZK Ryan Rush male 1998-06-13 Italy \n",
+ "9 93 UXL43IOW6OV Honorato Maxwell female 1982-03-09 France \n",
+ "10 95 OUP31WOE2IE Dara Wilcox female 1996-06-29 Singapore \n",
+ "11 97 SUF73DKV4QE Dante Hart male 1999-12-21 Peru \n",
+ "\n",
+ " hired dept position status region age \\\n",
+ "0 2001-02-11 pilot pilot 1 Canada 59 \n",
+ "1 2002-05-19 flight planning steward 1 Canada 39 \n",
+ "2 2007-06-19 aircraft maintenance airhostess 1 Ocenia 35 \n",
+ "3 2004-03-27 aircraft maintenance pilot 1 Ocenia 48 \n",
+ "4 2005-02-27 flight planning pilot 1 APAC 54 \n",
+ "5 2008-10-10 flight attendance airhostess 1 USA 50 \n",
+ "6 2011-03-18 flight attendance steward 1 Europe 23 \n",
+ "7 2011-08-25 flight attendance steward 1 Middle East 51 \n",
+ "8 2019-07-31 aircraft maintenance pilot 1 Middle East 24 \n",
+ "9 2017-02-04 aircraft maintenance airhostess 1 Europe 40 \n",
+ "10 2011-05-18 flight attendance airhostess 1 Canada 26 \n",
+ "11 2016-02-22 pilot pilot 1 Europe 22 \n",
+ "\n",
+ " hired_age hired_year hired_dt \n",
+ "0 21 2001 2001-02-11 \n",
+ "1 20 2002 2002-05-19 \n",
+ "2 15 2007 2007-06-19 \n",
+ "3 18 2004 2004-03-27 \n",
+ "4 17 2005 2005-02-27 \n",
+ "5 13 2008 2008-10-10 \n",
+ "6 11 2011 2011-03-18 \n",
+ "7 11 2011 2011-08-25 \n",
+ "8 3 2019 2019-07-31 \n",
+ "9 5 2017 2017-02-04 \n",
+ "10 11 2011 2011-05-18 \n",
+ "11 6 2016 2016-02-22 "
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def calculate_year(str_date):\n",
+ " date = datetime.strptime(str_date,'%Y-%m-%d')\n",
+ " today = datetime.today()\n",
+ " return today.year - date.year - ((today.month, today.day) < (date.month, date.day))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df['age'] = df['birthday'].map(calculate_year)\n",
+ "df['hired_age'] = df['hired'].map(calculate_year)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ "