직업별 월급 차이
welfare['code_job'].dtypes
dtype('float64')
welfare['code_job'].value_counts()
code_job
611.0 962
941.0 391
521.0 354
312.0 275
873.0 236
930.0 228
313.0 213
442.0 166
510.0 158
421.0 158
999.0 155
441.0 152
952.0 142
311.0 128
910.0 104
399.0 98
951.0 97
259.0 97
314.0 96
252.0 96
942.0 81
247.0 75
243.0 73
922.0 73
246.0 68
422.0 65
761.0 64
953.0 60
320.0 57
799.0 57
254.0 54
753.0 53
222.0 47
991.0 47
411.0 46
231.0 44
783.0 44
245.0 43
875.0 39
921.0 35
285.0 34
613.0 34
429.0 34
235.0 33
874.0 32
253.0 32
854.0 31
141.0 31
782.0 31
532.0 31
743.0 31
432.0 30
710.0 28
248.0 27
274.0 27
751.0 27
721.0 26
159.0 26
841.0 26
151.0 26
762.0 24
864.0 24
149.0 24
431.0 23
741.0 22
531.0 21
823.0 20
722.0 19
992.0 19
239.0 19
792.0 17
772.0 17
862.0 17
286.0 17
236.0 16
330.0 16
630.0 16
730.0 15
892.0 14
153.0 14
842.0 14
771.0 14
612.0 13
132.0 13
1002.0 13
899.0 13
223.0 12
855.0 12
412.0 12
863.0 12
281.0 12
811.0 11
251.0 11
851.0 11
152.0 11
221.0 11
852.0 10
139.0 10
234.0 10
392.0 10
121.0 9
284.0 9
241.0 9
273.0 9
821.0 8
283.0 8
133.0 8
781.0 8
271.0 8
244.0 7
832.0 7
752.0 7
224.0 6
1001.0 6
211.0 6
853.0 6
232.0 6
742.0 5
111.0 5
134.0 5
522.0 5
237.0 5
135.0 5
791.0 5
261.0 5
225.0 4
272.0 4
620.0 4
843.0 4
213.0 4
242.0 4
822.0 4
881.0 4
831.0 4
288.0 4
891.0 3
812.0 3
819.0 3
282.0 3
131.0 3
882.0 3
233.0 3
1009.0 2
112.0 2
391.0 2
784.0 2
122.0 2
861.0 1
423.0 1
872.0 1
Name: count, dtype: int64
list_job = pd.read_excel('Koweps_Codebook_2019.xlsx', sheet_name = '직종코드')
list_job.head()
https://github.com/youngwoos/Doit_Python/blob/main/Data/Koweps_Codebook_2019.xlsx
Doit_Python/Data/Koweps_Codebook_2019.xlsx at main · youngwoos/Doit_Python
<Do it! 쉽게 배우는 파이썬 데이터 분석> 저장소. Contribute to youngwoos/Doit_Python development by creating an account on GitHub.
github.com

list_job.shapelist_job.shape
(156, 2)
welfare = welfare.merge(list_job, how = 'left', on = 'code_job')
welfare.dropna(subset = 'code_job')[['code_job', 'job']].head()

직업별 월급 차이 분석하기
직업별 월급 평균표
job_income = welfare.dropna(subset = ['job', 'income']).groupby('job', as_index = False).agg(mean_income = ('income', 'mean'))
job_income.head()

월급이 많은 직업
top10 = job_income.sort_values('mean_income', ascending = False).head(10)
top10

import matplotlib.pyplot as plt
plt.rcParams.update({'font.family' : 'Malgun Gothic'})
sns.barplot(data = top10, y = 'job', x = 'mean_income')

월급이 적은 직업
bottom10 = job_income.sort_values('mean_income').head(10)
bottom10

sns.barplot(data = bottom10, y = 'job', x = 'mean_income').set(xlim = [0, 800])

성별 직업 빈도 분석하기
job_male = welfare.dropna(subset = 'job').query('sex == "male"').groupby('job', as_index = False).agg(n = ('job', 'count')).sort_values('n', ascending = False).head(10)
job_male

job_female = welfare.dropna(subset = 'job').query('sex == "female"').groupby('job', as_index = False).agg(n = ('job', 'count')).sort_values('n', ascending = False).head(10)
job_female

텍스트 마이닝
대통령 연설문 텍스트 마이닝
텍스트 마이닝: 문자로 된 데이터에서 가치 있는 정보를 얻어내는 분석 기법
형태소 분석: 문장을 구성하는 어절들이 어떤 품사인지 파악
jpype1 설치
KoNLPy 설치
https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html
Downloads for Amazon Corretto 11 - Amazon Corretto 11
Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.
docs.aws.amazon.com
visual studio tool 설치(jpype1설치에 필요)


가장 많이 사용된 단어 알아보기
연설문 데이터
https://github.com/youngwoos/Doit_Python/blob/main/Data/speech_moon.txt
Doit_Python/Data/speech_moon.txt at main · youngwoos/Doit_Python
<Do it! 쉽게 배우는 파이썬 데이터 분석> 저장소. Contribute to youngwoos/Doit_Python development by creating an account on GitHub.
github.com
moon = open('speech_moon.txt', encoding = 'UTF-8').read()
moon
'정권교체 하겠습니다!\n 정치교체 하겠습니다!\n 시대교체 하겠습니다!\n \n ‘불비불명(不飛不鳴)’이라는 고사가 있습니다. 남쪽 언덕 나뭇가지에 앉아, 3년 동안 날지도 울지도 않는 새. 그러나 그 새는 한번 날면 하늘 끝까지 날고, 한번 울면 천지를 뒤흔듭니다.\n\n그 동안 정치와 거리를 둬 왔습니다. 그러나 암울한 시대가 저를 정치로 불러냈습니다. 더 이상 남쪽 나뭇가지에 머무를 수 없었습니다. 이제 저는 국민과 함께 높이 날고 크게 울겠습니다. 오늘 저는 제18대 대통령선거 출마를 국민 앞에 엄숙히 선언합니다.\n\n\n‘우리나라 대통령’이 되겠습니다.\n\n\n존경하는 국민 여러분!\n \n 저는 대통령이 되겠습니다. 우리나라 대통령이 되겠습니다. 소수 특권층의 나라가 아니라 보통사람들이 주인인 ‘우리나라’, 네 편 내 편 편가르지 않고 함께 가는 우리나라, ‘우리’라는 말이 조금도 부끄럽지 않은, 진정한 ‘우리나라’의 대통령이 되겠습니다.\n\n지금까지 우리 보통사람들은 날지도 울지도 못하는 새였습니다. 나라의 주인으로 행세하지 못했고, 주인으로 대접받지 못했습니다. 나서서 말도 하지 못했습니다. 이제 몸을 일으켜 날아야 합니다. 당당하게 말하고 정치에 참여해야 합니다.\n\n제가 추구하는 ‘우리나라’는 정치인에게 맡겨놓는 나라가 아니라 시민이 직접 정치와 정책과정에 참여하는 나라입니다. 저는 시민과 동행하는 정치를 하고 싶습니다. 제가 추구하는 ‘우리나라’는 특권과 불평등의 나라가 아니라, 보통사람들이 함께 기회를 가지는 공평하고 정의로운 나라입니다.\n\n이제 권력과 돈을 가진 집단이 나라를 그들 마음대로 움직이던 시대는 끝났습니다. 힘없는 사람들에게 끝없이 희생을 강요하던 낡은 경제, 낡은 정치, 낡은 권력도 모두 끝났습니다. 오늘 저 문재인은 우리나라를 우리 모두의 나라로 선언합니다.\n\n국민이 모두 아픕니다.\n\n제가 높이 날고 크게 울겠다고 결심한 이유는 보통사람들의 삶이 너무 고달프고, 우리가 처한 현실이 너무도 엄중하기 때문입니다. 근본적인 혁신, 거대한 전환 없이는 나라가 무너지겠구나 하는 절박함 때문입니다.\n\n지금 우리의 삶은 어떻습니까? 우리 사회는 더 이상 경제성장의 과실을 나눠 갖지 않습니다. 소수의 부유층과 대기업의 창고는 황금으로 가득 차지만, 대부분 보통사람들은 취업불안, 주거불안, 고용불안, 건강불안, 노후불안 등 불안을 이불처럼 덮고 매일 잠자리에 들어야 합니다.\n\n국민 한 사람 한 사람이 모두 아픕니다. 빚 갚기 힘들어서, 아이 키우기 힘들어서, 일자리가 보이지 않아서 아픕니다. 입시부담과 성적스트레스 그리고 학교폭력에 상처받은 어린 영혼들은 그 아픔을 견디지 못하고 하나 둘 우리 곁을 떠나고 있습니다. 어르신들도 삶이 힘겨워서 스스로 세상을 버리는 분이 많습니다. 왜 이렇게 아픈 일들이 계속 일어날까요? 약자의 고통에 관심 없는 정부, 부자와 강자의 기득권 지켜주기에 급급한 정치가 사람들에게서 희망을 앗아가 버렸기 때문입니다. 지금 길거리는 표정 없는 사람들로 넘쳐납니다. 국민들에게 희망을 주는 정치가 절실하게 필요합니다.\n\n국민의 뜻이 대통령의 길입니다.\n\n저는 대선출마를 결심하고 국민 여러분께 출마선언문을 함께 쓰자고 제안 드렸습니다. 많은 분들이 글을 주셨습니다. 소중한 의견과 제안을 보내 주셨습니다. 고단하고 힘겨운 삶이 거기에 있었습니다. 시민의 한숨과 눈물을 닦아주지 못하는 정치가 있었고, 오히려 국민의 걱정거리가 된 초라한 정부의 모습도 있었습니다.\n\n상식이 통하는 사회, 권한과 책임이 비례하는 사회, 다름을 인정하는 세상, 개천에서 용이 날 수 있는 사회, 철학이 있는 나라, 약자의 얘기에 귀를 기울이고, 어려운 사람에게 진심어린 위로를 건네는 세상, 세금이 제대로 쓰이는 나라, 힘없는 사람에게 관대하고 힘 있는 사람에게 엄격한 잣대가 적용되는 사회, 국민들이 기대고 의지할 수 있도록 어깨를 내어주는 대통령, 국민에게 부끄럽지 않은 정부를 만들어 달라는 것이 국민의 요구였습니다.\n\n미안했습니다. 가슴 아팠습니다. 지극히 평범하고 상식적인 요구였지만, 이 소박한 요구를 정치가 외면해 왔던 것입니다.\n\n국가비전, 많이 공부하고 많이 고민했습니다. 그러나 거창하게만 들리는 이 국가비전 역시 국민의 마음속에 있었습니다. 더욱 낮아지고 겸손해져서 국민의 마음속으로 들어가라. 길이 보일 것이다. 그것이 대통령의 길이다. 국민들이 제게 준 가르침입니다. 국민의 뜻에서 대통령의 길을 찾겠습니다. 대한민국의 길을 찾겠습니다.\n\n새로운 대한민국을 만들겠습니다. 지금 우리는 ‘거대한 전환’의 시기를 맞고 있습니다. 기존의 사고, 과거의 낡은 방식으로는 해결할 수 없는 근본적인 문제들이 우리 앞에 놓여 있습니다. 지금까지 우리 사회를 지배해왔던 ‘경쟁’, ‘승자독식’, ‘강자지배’의 원리로는 빈부격차의 확대, 중산층과 서민들의 삶의 기반 붕괴, 중소기업과 자영업자들의 고통, 지역경제의 낙후, 경제성장의 잠재력 약화라는 악순환에서 빠져나올 길이 없습니다.\n\n더구나 지금 유럽, 미국, 중국, 인도 등 세계 곳곳에서 경제위기가 고조되고 있습니다. 무분별한 시장만능주의가 빚어낸 결과입니다. 일부에서는 기존 자본주의 모델의 수명이 다했다는 진단을 내놓기도 합니다. 이런 흐름은 과도한 대외의존형 경제와 취약한 사회안전망을 지닌 대한민국에게 더 큰 위기가 되고 있습니다. 무엇보다도 우리는 개발독재 모델의 유산을 청산해야 합니다. 시장만능주의로 대표되는 시장독재 모델도 극복해야 합니다. 개방, 공유, 협동, 공생의 새로운 원리를 채택해 인간이 인간답게 살 수 있는 민주적이고 공정한 시장경제 모델을 만들어야 합니다.\n\n운 좋게 부자 집안에서 태어났다고 평생을 앞서가고, 가난한 집 자녀들은 출발선부터 한참 뒤처진다면 참으로 불공평한 경쟁입니다. 그것이 교육이든, 비정규직이든, 중소기업이든, 지방 산업이든 공정하게 경쟁하고 노력한 만큼 정당한 보상을 받는 세상이 돼야 합니다. 지방대학을 나와도, 고등학교만 나와도 실력대로 대접받을 수 있어야 합니다. 누구나 공정하게 경쟁하고 그 결과에 승복해야 하며, 패자에게는 따뜻한 위로와 패자부활의 기회가 주어져야 합니다.\n\n지나친 경쟁과 소외, 양극화의 살벌한 세상 대신 사람들이 서로 믿고 협력하여 함께 더 큰 성장을 이루는 나라, 그리고 그 결과를 공유하여 지속가능한 삶의 토대를 만드는 나라가 제가 꿈꾸는 나라입니다. 북한과도 신뢰와 협력의 토대 위에 평화와 공동번영을 이루는 나라가 제가 꿈꾸는 나라입니다. 저는 이 두 가지의 비전을 합쳐 ‘상생과 평화의 새로운 대한민국’이라 부르고자 합니다.\n\n상생과 평화의 대한민국은 공평과 정의에 바탕을 두고, 성장의 과실을 함께 누리는 나라, 복지가 강한 나라, 일자리를 최우선에 두는 나라, 아이들 여성 노인이 행복한 나라, 안전하고 평화로운 나라가 될 것입니다.\n\n1. 공평과 정의를 나라의 근간으로 삼겠습니다. 승자독식과 강자지배의 낡은 질서를 폐기하고 대한민국에 상생과 평화의 새 질서를 수립하기 위해, 저는 먼저 공평과 정의의 원칙을 분명히 세우겠습니다. 이명박 정권은 입으로는 공정사회를 부르짖었지만 실제로는 측근세력들이 국가권력을 사유화하고 공공성을 파괴했고, 토건세력과 재벌집단, 그리고 최상위 계층에게 이익을 과도하게 몰아줌으로써 공정이라는 말 자체를 냉소거리로 만들고 말았습니다. 이래서는 신뢰와 상생의 사회가 불가능합니다.\n\n저는 모든 시민들에게 균등한 기회를 제공하는 ‘공평’과, 반칙과 특권, 부정부패를 척결하는 ‘정의’, 이 두 가지 가치를 근간으로 새로운 대한민국을 만들어나가겠습니다. 정의의 원칙은 특히 경제 분야에서 더 강조되어야 합니다. 조세정의를 실현하여 소득 있는 곳에 세금 있다는 원칙이 흔들리지 않아야 합니다. 세금 없는 불로소득이 있어서는 안 됩니다. 정치민주화와 더불어 경제민주화가 절실히 필요합니다. 재벌의 지배구조를 개선하고 공정거래질서를 확립해야 합니다. 대기업과 중소기업 간의 힘의 불균형을 바로잡아 약자가 억울하게 당하는 것을 막아야 합니다.\n\n노사는 한 배를 탄 공동운명체입니다. 노동자들이 부당하게 해고되고 권익이 부당하게 침해당하는 일은 없어야 합니다. 노동자들의 목소리가 적극적으로 경영에 반영될 때 기업 성과는 더욱 개선됩니다. 그리하여 소수의 강자가 다수 위에 군림하지 않고, 약자와 강자가 공존 상생하는 경제 질서를 만드는 것이 경제민주화의 주요 내용이 돼야 합니다.\n\n2. 4대 성장전략으로 획기적 국가발전을 이루겠습니다.\n\n선성장-후분배, 낙수효과 같은 낡은 생각이 사회적 양극화와 성장잠재력 저하라는 아픈 결과를 낳았습니다. 이를 극복하기 위해 성장과 분배, 환경과 평화가 역동적 선순환을 이루는 4대 성장전략을 추진하겠습니다.\n\n첫째, 분배와 재분배를 강화하여 중산층과 서민들의 유효수요와 구매력을 확대함으로써, 소비와 투자를 촉진하는 ‘포용적 성장’을 추진하겠습니다. 이를 위해 최저임금을 높이고 생활임금 개념을 정책에 반영하겠습니다. 복지투자 확대도 서민경제 활성화로 이어질 것입니다. 또한 재벌과 거대기업의 과도한 경제력 집중을 억제하고, 고용의 대부분을 감당하는 중소기업이 성장의 중심에 서도록 지원하겠습니다. 사회적 기업과 협동조합을 육성하는 등 사회적 경제를 확대하여 포용적 성장을 이루기 위한 거시구조적 개혁도 추진해 나가겠습니다.\n\n둘째, 인적 자본에 대한 투자를 강화하여 사람 중심의 경제성장을 실현하겠습니다. 교육혁신을 통해 학생들과 학부모의 고통을 줄이고 입시를 위한 과잉 학습 대신 평생학습체제가 자리 잡도록 일대 교육혁신을 해내겠습니다. 문화혁신을 통해 모든 국민의 창조성을 높이고 이를 통해 기술혁신과 신산업 형성의 역동적 파동을 일으키는 ‘창조적 성장’을 추진하겠습니다.\n\n셋째, 석유시대의 종말에 대비하여 신재생 에너지의 비중을 대폭 확대하고, 녹색 에너지기술, 건축, 전기자동차 제조 등 여러 영역에서 신산업을 육성하는 ‘생태적 성장’을 추진하겠습니다. 추가 원전 건설을 중단하고 수명이 다된 원전은 가동을 중지시키겠습니다. 그리고 신재생 에너지의 비중이 확대되는 만큼 원전의 비중을 줄여나가겠습니다. 이는 단순히 에너지 종류를 바꾸거나 아끼는 정도가 아니라, 산업과 소비생활 전반의 구조를 바꾸는 제3차 산업혁명이라 할 수 있는 변화입니다. 이를 위해 토건사업, 개발사업이 늘 우위에 있었던 정부구조와 재정지출 구조도 혁신하겠습니다. 산업-환경-농림-국토 등 여러 부처를 지속가능성의 가치 아래 재편해 나가겠습니다.\n\n넷째, 인터넷과 SNS를 통해 전세계로 확산되고 있는 소통 네트워크를 기반으로 국경과 경쟁을 넘어 집단협업, 개방형 혁신, 협동생태계를 활용하는 ‘협력적 성장’을 추진하겠습니다. 이런 새로운 인식 아래, 한반도평화와 남북협력을 강력한 성장동력으로 활용하겠습니다. 남북한은 자원, 기술, 인력 등 많은 점에서 탁월한 보완관계입니다. 평화를 바탕으로 서로의 강점을 엮어 동북아시아로, 또 세계로 함께 진출해야 합니다.\n\n3. ‘강한 복지국가’를 향해 담대하게 나아가겠습니다.\n\n정조대왕은 “위에서 손해를 보고 아래가 이득이 되게 하라(損上益下). 그것이 국가가 할 일이다.”라고 말했습니다. 2백 년 전 이와 같은 소득재분배, 복지국가의 사상을 가진 위정자가 지구상 어디에 또 있었겠습니까? 이제 우리는 복지국가를 향해 담대하게 나아갈 때입니다. 늦었기 때문에 더욱 발걸음을 재촉해야 합니다.\n\n“복지가 포퓰리즘”이라는 새누리당의 중상모략을 거부합니다. 부자감세, 4대강 사업 같은 시대착오적 과오를 청산하고, 하루빨리 복지국가로 가야 합니다. 우리는 지금 복지국가로 가느냐, 양극화의 분열된 국가로 가느냐 하는 절박한 싸움을 벌이고 있습니다. 나라의 운명이 달린 이 건곤일척의 싸움은 복지에 진정성을 가진 진보세력만이 이길 수 있습니다.\n\n복지는 낭비가 아니고 투자입니다. 사람에 대한 투자이며, 동시에 강력한 성장전략이기도 합니다. 강한 복지국가일수록 국가 경쟁력도 더 높습니다. 복지의 확대를 통해 보육, 교육, 의료, 요양 등 사회서비스 부문에 수많은 일자리가 생기고, 자영업에 몰려 있는 과잉인력을 흡수할 수 있습니다. 공공임대주택과 같은 주거복지를 늘리는 것은 가장 좋은 전월세 대책입니다.\n\n결국 복지국가로 가는 길은 사람에 대한 투자, 일자리 창출, 자영업 고통 경감, 삶의 질 향상 등 1석 4조의 효과를 만나는 길입니다. 우리는 과감히 강한 보편적 복지국가로 가야 합니다. 이렇게 하면 국민의 살림이 서서히 나아질 것이며 5년 뒤에는 큰 성과가 나타날 것입니다.\n\n4. ‘일자리 정부’로 ‘일자리 혁명’을 이루겠습니다.\n\n복지의 확대와 함께 저는 강력한 ‘일자리 혁명’을 이루고자 합니다. 지금 너무나 많은 젊은이들과 실업자, 비정규직 종사자, 근로능력이 있는 고령자들이 일할 수 있는 기회와 더 좋은 일자리를 요구하고 있습니다.\n\n좋은 일자리 창출을 위해 비정규직의 정규직 전환 촉진, 비정규직에 대한 차별철폐, 근로시간 단축을 통한 신규고용 확대, 고용영향평가제도의 채택, 고용증진과 기업지원의 연계 등을 중요한 정책수단으로 채택하겠습니다. 또한 정보통신 산업, 바이오산업, 나노 산업, 신재생에너지 산업, 문화산업과 콘텐츠산업 등 신산업을 크게 일으켜 일자리를 대대적으로 만들겠습니다. 그리고 앞에서 말한 보육, 교육, 의료, 복지 등 사회서비스 부문은 무궁무진한 잠재적 일자리의 보고입니다. 일자리 없는 곳에서 희망을 찾을 수 없습니다. 지방 일자리에 대해 특별한 노력을 기울이겠습니다. 지역균형발전은 곧 산업 균형, 일자리 균형이 목표입니다. 이명박 정부의 방해에도 불구하고 끝내 국민이 지켜준 세종시, 혁신도시를 지방 일자리 창출의 거점으로 만들겠습니다. 공기업과 공무원의 지역우대 채용, 각종 정부 지원의 지방채용 연동제를 확대하겠습니다. 이 모든 정책의 실효성을 담보하기 위해 대통령이 되면 저는 가장 먼저 대통령 직속으로 <국가일자리위원회>를 설치하고 매달 ‘일자리점검 범정부회의’를 개최하여 일자리 마련 상황을 점검, 독려하겠습니다. 저는 먼 훗날 ‘일자리 혁명을 일으킨 대통령’으로 평가받기를 희망합니다.\n\n5. 아이들과 여성, 그리고 노인들이 활짝 웃는 나라를 만들겠습니다.\n\n아이들이 행복한 나라를 만들어야 합니다. 행복한 교육, 즐거운 학교를 만드는 것이 교육혁신의 기본방향이어야 합니다. 이를 위해 유아, 초등단계의 과도한 학습 부담을 없애고 특기적성 이외의 사교육을 최대한 줄여 나가겠습니다.\n\n교육이 이념의 전장이 되어서는 곤란합니다. 교육은 진보도 보수도 아닌 아이들을 위해 존재해야 합니다. 학생, 교사, 학교의 자율성, 창의성을 보장하고 마을이 아이를 함께 키울 수 있도록 지원하겠습니다. 또한 좋은 일자리와 산업혁신을 위해서는 평생학습체제가 뒷받침되어야 합니다. 평생학습 참가율을 선진국 수준으로 끌어올리겠습니다.\n\n지금 우리가 누리는 풍요는 모두 어르신들의 희생 덕분입니다. 그러나 어르신들은 노후대비를 할 겨를도 없이, 급격한 가족구조 변화와 노동시장 변화로 극심한 어려움을 겪고 있습니다. 이제 사회가 효도하겠습니다. 참여정부가 도입했던 기초노령연금, 장기요양보험을 대폭 강화하고, 건강지원 방법을 새로운 차원으로 개선하겠습니다. 노인 일자리를 늘리고, 특히 그 연륜과 경험을 지역사회에 활용할 수 있는 방안도 마련하겠습니다.\n\n남녀의 실질적 평등을 위해서도 아직 남은 숙제가 많습니다. 가사와 육아, 노인을 돌보는 책임은 여전히 여성들에게만 맡겨져 있습니다. OECD 수준에 훨씬 못 미치는 여성 경제활동 참가율이나 세계 최저의 출산율은 대한민국의 여성들이 얼마나 힘들게 살고 있는지 잘 말해줍니다.\n\n가족 돌봄의 공적서비스를 확대해서 여성의 부담을 줄이겠습니다. 취업과 승진기회의 제한 등 사회적 차별을 해소할 수 있는 적극적 대책도 만들겠습니다. 남녀가 함께 일하고, 함께 돌보는 사회로 전진하겠습니다.\n\n6. 대한민국은 강하게, 한반도는 평화롭게 만들겠습니다.\n\n국가의 존립과 국토방위는 헌법상 대통령에게 주어진 가장 막중한 의무입니다. 모든 대외정책의 출발은 튼튼한 국방력입니다. 대한민국 군을 강하고 유능한 군대로 만들겠습니다. 미국과의 관계를 더욱 건강하고 바람직한 관계로 발전시키겠습니다. 중국과 일본, 러시아 등 주변국들과도 호혜협력 관계를 더욱 강화해 나가겠습니다.\n\n전쟁의 불안에서 한반도를 해방시키겠습니다. 이명박 정부가 파탄에 빠뜨린 안보를 바로 세우겠습니다. 새누리당 정권 아래서 분쟁과 대결로 얼룩졌던 휴전선과 NLL 일대를 평화경제 지대로 만들겠습니다. 김대중 대통령의 6.15 공동선언과 노무현 대통령의 10.4 남북정상선언을 남북 양측이 책임 있게 지키고 이행하도록 하겠습니다. 개성공단을 확장하고 금강산 관광을 재개하여 금강산과 설악산, 평창을 연결하는 국제관광특구를 만들어 적극 키우겠습니다. 남북 군사대결지대를 공동이익을 창출하는 경제지대로 전환하여 부모들이 안심하고 자식을 군대 보내는 안보환경을 만들겠습니다. 특권층의 군대 안가기를 철저하게 막는 한편 젊은이들의 병역 부담을 줄여나가겠습니다. 사병의 복지도 크게 향상시키겠습니다.\n\n북핵문제를 평화적으로 해결하고 한반도 평화체제를 구축하겠습니다. 저는 북한의 핵을 용인할 수 없다는 확고한 입장을 가지고 있습니다. 대화와 협상을 통해 반드시 핵을 포기하도록 만들겠습니다. 실종된 6자회담을 재개하고 대한민국의 주도적 역할을 복원하겠습니다. 6자회담과 남북관계 복원, 평화체제 구축작업을 병행 추진하여 한반도에 평화와 공동번영의 선순환 구조를 만들어 나가겠습니다. 그리고 그 속에서 새로운 성장동력을 찾겠습니다.\n\n순국선열과 민주영령 앞에서 약속드립니다.\n\n존경하는 국민 여러분! 이 자리는 애국, 민주, 헌신이라는 세 가지 가치가 살아 숨 쉬는 역사의 현장입니다. 저는 역사가 보는 앞에서 대통령 출마선언을 함으로써, 역사 앞에 제 자신을 바치겠다는 결연한 의지를 밝힙니다. 역사를 가슴에 새기고 미래를 향해 뚜벅뚜벅 걸어가겠다는 의지를 밝힙니다.\n\n저것은 넘을 수 없는 벽이라고 고개를 떨구고 있을 때 담쟁이 잎 하나는 담쟁이 잎 수천 개를 이끌고 결국 그 벽을 넘는다.\n\n— 도종환 <담쟁이>\n \n 도종환 시인의 <담쟁이>라는 시의 일부입니다. 우리 모두 담쟁이처럼 서로 두 손 꽉 잡고 벽을 넘읍시다. 특권의 벽, 차별의 벽, 분단과 분열의 벽, 패배주의의 벽을 넘읍시다. 저 문재인과 함께 새로운 세상의 문을 엽시다.\n\n저 문재인은 겸손한 권력, 따뜻한 나라를 만들겠습니다. 국민의 마음에서 길을 찾는 우리나라 대통령이 되겠습니다. 우리 모두가 주인인 진정한 우리나라 대통령이 되겠습니다.\n\n대단히 고맙습니다.\n'
불필요한 문자 제거
import re
moon = re.sub('[^가-힣]', ' ', moon)
moon
'정권교체 하겠습니다 정치교체 하겠습니다 시대교체 하겠습니다 불비불명 이라는 고사가 있습니다 남쪽 언덕 나뭇가지에 앉아 년 동안 날지도 울지도 않는 새 그러나 그 새는 한번 날면 하늘 끝까지 날고 한번 울면 천지를 뒤흔듭니다 그 동안 정치와 거리를 둬 왔습니다 그러나 암울한 시대가 저를 정치로 불러냈습니다 더 이상 남쪽 나뭇가지에 머무를 수 없었습니다 이제 저는 국민과 함께 높이 날고 크게 울겠습니다 오늘 저는 제 대 대통령선거 출마를 국민 앞에 엄숙히 선언합니다 우리나라 대통령 이 되겠습니다 존경하는 국민 여러분 저는 대통령이 되겠습니다 우리나라 대통령이 되겠습니다 소수 특권층의 나라가 아니라 보통사람들이 주인인 우리나라 네 편 내 편 편가르지 않고 함께 가는 우리나라 우리 라는 말이 조금도 부끄럽지 않은 진정한 우리나라 의 대통령이 되겠습니다 지금까지 우리 보통사람들은 날지도 울지도 못하는 새였습니다 나라의 주인으로 행세하지 못했고 주인으로 대접받지 못했습니다 나서서 말도 하지 못했습니다 이제 몸을 일으켜 날아야 합니다 당당하게 말하고 정치에 참여해야 합니다 제가 추구하는 우리나라 는 정치인에게 맡겨놓는 나라가 아니라 시민이 직접 정치와 정책과정에 참여하는 나라입니다 저는 시민과 동행하는 정치를 하고 싶습니다 제가 추구하는 우리나라 는 특권과 불평등의 나라가 아니라 보통사람들이 함께 기회를 가지는 공평하고 정의로운 나라입니다 이제 권력과 돈을 가진 집단이 나라를 그들 마음대로 움직이던 시대는 끝났습니다 힘없는 사람들에게 끝없이 희생을 강요하던 낡은 경제 낡은 정치 낡은 권력도 모두 끝났습니다 오늘 저 문재인은 우리나라를 우리 모두의 나라로 선언합니다 국민이 모두 아픕니다 제가 높이 날고 크게 울겠다고 결심한 이유는 보통사람들의 삶이 너무 고달프고 우리가 처한 현실이 너무도 엄중하기 때문입니다 근본적인 혁신 거대한 전환 없이는 나라가 무너지겠구나 하는 절박함 때문입니다 지금 우리의 삶은 어떻습니까 우리 사회는 더 이상 경제성장의 과실을 나눠 갖지 않습니다 소수의 부유층과 대기업의 창고는 황금으로 가득 차지만 대부분 보통사람들은 취업불안 주거불안 고용불안 건강불안 노후불안 등 불안을 이불처럼 덮고 매일 잠자리에 들어야 합니다 국민 한 사람 한 사람이 모두 아픕니다 빚 갚기 힘들어서 아이 키우기 힘들어서 일자리가 보이지 않아서 아픕니다 입시부담과 성적스트레스 그리고 학교폭력에 상처받은 어린 영혼들은 그 아픔을 견디지 못하고 하나 둘 우리 곁을 떠나고 있습니다 어르신들도 삶이 힘겨워서 스스로 세상을 버리는 분이 많습니다 왜 이렇게 아픈 일들이 계속 일어날까요 약자의 고통에 관심 없는 정부 부자와 강자의 기득권 지켜주기에 급급한 정치가 사람들에게서 희망을 앗아가 버렸기 때문입니다 지금 길거리는 표정 없는 사람들로 넘쳐납니다 국민들에게 희망을 주는 정치가 절실하게 필요합니다 국민의 뜻이 대통령의 길입니다 저는 대선출마를 결심하고 국민 여러분께 출마선언문을 함께 쓰자고 제안 드렸습니다 많은 분들이 글을 주셨습니다 소중한 의견과 제안을 보내 주셨습니다 고단하고 힘겨운 삶이 거기에 있었습니다 시민의 한숨과 눈물을 닦아주지 못하는 정치가 있었고 오히려 국민의 걱정거리가 된 초라한 정부의 모습도 있었습니다 상식이 통하는 사회 권한과 책임이 비례하는 사회 다름을 인정하는 세상 개천에서 용이 날 수 있는 사회 철학이 있는 나라 약자의 얘기에 귀를 기울이고 어려운 사람에게 진심어린 위로를 건네는 세상 세금이 제대로 쓰이는 나라 힘없는 사람에게 관대하고 힘 있는 사람에게 엄격한 잣대가 적용되는 사회 국민들이 기대고 의지할 수 있도록 어깨를 내어주는 대통령 국민에게 부끄럽지 않은 정부를 만들어 달라는 것이 국민의 요구였습니다 미안했습니다 가슴 아팠습니다 지극히 평범하고 상식적인 요구였지만 이 소박한 요구를 정치가 외면해 왔던 것입니다 국가비전 많이 공부하고 많이 고민했습니다 그러나 거창하게만 들리는 이 국가비전 역시 국민의 마음속에 있었습니다 더욱 낮아지고 겸손해져서 국민의 마음속으로 들어가라 길이 보일 것이다 그것이 대통령의 길이다 국민들이 제게 준 가르침입니다 국민의 뜻에서 대통령의 길을 찾겠습니다 대한민국의 길을 찾겠습니다 새로운 대한민국을 만들겠습니다 지금 우리는 거대한 전환 의 시기를 맞고 있습니다 기존의 사고 과거의 낡은 방식으로는 해결할 수 없는 근본적인 문제들이 우리 앞에 놓여 있습니다 지금까지 우리 사회를 지배해왔던 경쟁 승자독식 강자지배 의 원리로는 빈부격차의 확대 중산층과 서민들의 삶의 기반 붕괴 중소기업과 자영업자들의 고통 지역경제의 낙후 경제성장의 잠재력 약화라는 악순환에서 빠져나올 길이 없습니다 더구나 지금 유럽 미국 중국 인도 등 세계 곳곳에서 경제위기가 고조되고 있습니다 무분별한 시장만능주의가 빚어낸 결과입니다 일부에서는 기존 자본주의 모델의 수명이 다했다는 진단을 내놓기도 합니다 이런 흐름은 과도한 대외의존형 경제와 취약한 사회안전망을 지닌 대한민국에게 더 큰 위기가 되고 있습니다 무엇보다도 우리는 개발독재 모델의 유산을 청산해야 합니다 시장만능주의로 대표되는 시장독재 모델도 극복해야 합니다 개방 공유 협동 공생의 새로운 원리를 채택해 인간이 인간답게 살 수 있는 민주적이고 공정한 시장경제 모델을 만들어야 합니다 운 좋게 부자 집안에서 태어났다고 평생을 앞서가고 가난한 집 자녀들은 출발선부터 한참 뒤처진다면 참으로 불공평한 경쟁입니다 그것이 교육이든 비정규직이든 중소기업이든 지방 산업이든 공정하게 경쟁하고 노력한 만큼 정당한 보상을 받는 세상이 돼야 합니다 지방대학을 나와도 고등학교만 나와도 실력대로 대접받을 수 있어야 합니다 누구나 공정하게 경쟁하고 그 결과에 승복해야 하며 패자에게는 따뜻한 위로와 패자부활의 기회가 주어져야 합니다 지나친 경쟁과 소외 양극화의 살벌한 세상 대신 사람들이 서로 믿고 협력하여 함께 더 큰 성장을 이루는 나라 그리고 그 결과를 공유하여 지속가능한 삶의 토대를 만드는 나라가 제가 꿈꾸는 나라입니다 북한과도 신뢰와 협력의 토대 위에 평화와 공동번영을 이루는 나라가 제가 꿈꾸는 나라입니다 저는 이 두 가지의 비전을 합쳐 상생과 평화의 새로운 대한민국 이라 부르고자 합니다 상생과 평화의 대한민국은 공평과 정의에 바탕을 두고 성장의 과실을 함께 누리는 나라 복지가 강한 나라 일자리를 최우선에 두는 나라 아이들 여성 노인이 행복한 나라 안전하고 평화로운 나라가 될 것입니다 공평과 정의를 나라의 근간으로 삼겠습니다 승자독식과 강자지배의 낡은 질서를 폐기하고 대한민국에 상생과 평화의 새 질서를 수립하기 위해 저는 먼저 공평과 정의의 원칙을 분명히 세우겠습니다 이명박 정권은 입으로는 공정사회를 부르짖었지만 실제로는 측근세력들이 국가권력을 사유화하고 공공성을 파괴했고 토건세력과 재벌집단 그리고 최상위 계층에게 이익을 과도하게 몰아줌으로써 공정이라는 말 자체를 냉소거리로 만들고 말았습니다 이래서는 신뢰와 상생의 사회가 불가능합니다 저는 모든 시민들에게 균등한 기회를 제공하는 공평 과 반칙과 특권 부정부패를 척결하는 정의 이 두 가지 가치를 근간으로 새로운 대한민국을 만들어나가겠습니다 정의의 원칙은 특히 경제 분야에서 더 강조되어야 합니다 조세정의를 실현하여 소득 있는 곳에 세금 있다는 원칙이 흔들리지 않아야 합니다 세금 없는 불로소득이 있어서는 안 됩니다 정치민주화와 더불어 경제민주화가 절실히 필요합니다 재벌의 지배구조를 개선하고 공정거래질서를 확립해야 합니다 대기업과 중소기업 간의 힘의 불균형을 바로잡아 약자가 억울하게 당하는 것을 막아야 합니다 노사는 한 배를 탄 공동운명체입니다 노동자들이 부당하게 해고되고 권익이 부당하게 침해당하는 일은 없어야 합니다 노동자들의 목소리가 적극적으로 경영에 반영될 때 기업 성과는 더욱 개선됩니다 그리하여 소수의 강자가 다수 위에 군림하지 않고 약자와 강자가 공존 상생하는 경제 질서를 만드는 것이 경제민주화의 주요 내용이 돼야 합니다 대 성장전략으로 획기적 국가발전을 이루겠습니다 선성장 후분배 낙수효과 같은 낡은 생각이 사회적 양극화와 성장잠재력 저하라는 아픈 결과를 낳았습니다 이를 극복하기 위해 성장과 분배 환경과 평화가 역동적 선순환을 이루는 대 성장전략을 추진하겠습니다 첫째 분배와 재분배를 강화하여 중산층과 서민들의 유효수요와 구매력을 확대함으로써 소비와 투자를 촉진하는 포용적 성장 을 추진하겠습니다 이를 위해 최저임금을 높이고 생활임금 개념을 정책에 반영하겠습니다 복지투자 확대도 서민경제 활성화로 이어질 것입니다 또한 재벌과 거대기업의 과도한 경제력 집중을 억제하고 고용의 대부분을 감당하는 중소기업이 성장의 중심에 서도록 지원하겠습니다 사회적 기업과 협동조합을 육성하는 등 사회적 경제를 확대하여 포용적 성장을 이루기 위한 거시구조적 개혁도 추진해 나가겠습니다 둘째 인적 자본에 대한 투자를 강화하여 사람 중심의 경제성장을 실현하겠습니다 교육혁신을 통해 학생들과 학부모의 고통을 줄이고 입시를 위한 과잉 학습 대신 평생학습체제가 자리 잡도록 일대 교육혁신을 해내겠습니다 문화혁신을 통해 모든 국민의 창조성을 높이고 이를 통해 기술혁신과 신산업 형성의 역동적 파동을 일으키는 창조적 성장 을 추진하겠습니다 셋째 석유시대의 종말에 대비하여 신재생 에너지의 비중을 대폭 확대하고 녹색 에너지기술 건축 전기자동차 제조 등 여러 영역에서 신산업을 육성하는 생태적 성장 을 추진하겠습니다 추가 원전 건설을 중단하고 수명이 다된 원전은 가동을 중지시키겠습니다 그리고 신재생 에너지의 비중이 확대되는 만큼 원전의 비중을 줄여나가겠습니다 이는 단순히 에너지 종류를 바꾸거나 아끼는 정도가 아니라 산업과 소비생활 전반의 구조를 바꾸는 제 차 산업혁명이라 할 수 있는 변화입니다 이를 위해 토건사업 개발사업이 늘 우위에 있었던 정부구조와 재정지출 구조도 혁신하겠습니다 산업 환경 농림 국토 등 여러 부처를 지속가능성의 가치 아래 재편해 나가겠습니다 넷째 인터넷과 를 통해 전세계로 확산되고 있는 소통 네트워크를 기반으로 국경과 경쟁을 넘어 집단협업 개방형 혁신 협동생태계를 활용하는 협력적 성장 을 추진하겠습니다 이런 새로운 인식 아래 한반도평화와 남북협력을 강력한 성장동력으로 활용하겠습니다 남북한은 자원 기술 인력 등 많은 점에서 탁월한 보완관계입니다 평화를 바탕으로 서로의 강점을 엮어 동북아시아로 또 세계로 함께 진출해야 합니다 강한 복지국가 를 향해 담대하게 나아가겠습니다 정조대왕은 위에서 손해를 보고 아래가 이득이 되게 하라 그것이 국가가 할 일이다 라고 말했습니다 백 년 전 이와 같은 소득재분배 복지국가의 사상을 가진 위정자가 지구상 어디에 또 있었겠습니까 이제 우리는 복지국가를 향해 담대하게 나아갈 때입니다 늦었기 때문에 더욱 발걸음을 재촉해야 합니다 복지가 포퓰리즘 이라는 새누리당의 중상모략을 거부합니다 부자감세 대강 사업 같은 시대착오적 과오를 청산하고 하루빨리 복지국가로 가야 합니다 우리는 지금 복지국가로 가느냐 양극화의 분열된 국가로 가느냐 하는 절박한 싸움을 벌이고 있습니다 나라의 운명이 달린 이 건곤일척의 싸움은 복지에 진정성을 가진 진보세력만이 이길 수 있습니다 복지는 낭비가 아니고 투자입니다 사람에 대한 투자이며 동시에 강력한 성장전략이기도 합니다 강한 복지국가일수록 국가 경쟁력도 더 높습니다 복지의 확대를 통해 보육 교육 의료 요양 등 사회서비스 부문에 수많은 일자리가 생기고 자영업에 몰려 있는 과잉인력을 흡수할 수 있습니다 공공임대주택과 같은 주거복지를 늘리는 것은 가장 좋은 전월세 대책입니다 결국 복지국가로 가는 길은 사람에 대한 투자 일자리 창출 자영업 고통 경감 삶의 질 향상 등 석 조의 효과를 만나는 길입니다 우리는 과감히 강한 보편적 복지국가로 가야 합니다 이렇게 하면 국민의 살림이 서서히 나아질 것이며 년 뒤에는 큰 성과가 나타날 것입니다 일자리 정부 로 일자리 혁명 을 이루겠습니다 복지의 확대와 함께 저는 강력한 일자리 혁명 을 이루고자 합니다 지금 너무나 많은 젊은이들과 실업자 비정규직 종사자 근로능력이 있는 고령자들이 일할 수 있는 기회와 더 좋은 일자리를 요구하고 있습니다 좋은 일자리 창출을 위해 비정규직의 정규직 전환 촉진 비정규직에 대한 차별철폐 근로시간 단축을 통한 신규고용 확대 고용영향평가제도의 채택 고용증진과 기업지원의 연계 등을 중요한 정책수단으로 채택하겠습니다 또한 정보통신 산업 바이오산업 나노 산업 신재생에너지 산업 문화산업과 콘텐츠산업 등 신산업을 크게 일으켜 일자리를 대대적으로 만들겠습니다 그리고 앞에서 말한 보육 교육 의료 복지 등 사회서비스 부문은 무궁무진한 잠재적 일자리의 보고입니다 일자리 없는 곳에서 희망을 찾을 수 없습니다 지방 일자리에 대해 특별한 노력을 기울이겠습니다 지역균형발전은 곧 산업 균형 일자리 균형이 목표입니다 이명박 정부의 방해에도 불구하고 끝내 국민이 지켜준 세종시 혁신도시를 지방 일자리 창출의 거점으로 만들겠습니다 공기업과 공무원의 지역우대 채용 각종 정부 지원의 지방채용 연동제를 확대하겠습니다 이 모든 정책의 실효성을 담보하기 위해 대통령이 되면 저는 가장 먼저 대통령 직속으로 국가일자리위원회 를 설치하고 매달 일자리점검 범정부회의 를 개최하여 일자리 마련 상황을 점검 독려하겠습니다 저는 먼 훗날 일자리 혁명을 일으킨 대통령 으로 평가받기를 희망합니다 아이들과 여성 그리고 노인들이 활짝 웃는 나라를 만들겠습니다 아이들이 행복한 나라를 만들어야 합니다 행복한 교육 즐거운 학교를 만드는 것이 교육혁신의 기본방향이어야 합니다 이를 위해 유아 초등단계의 과도한 학습 부담을 없애고 특기적성 이외의 사교육을 최대한 줄여 나가겠습니다 교육이 이념의 전장이 되어서는 곤란합니다 교육은 진보도 보수도 아닌 아이들을 위해 존재해야 합니다 학생 교사 학교의 자율성 창의성을 보장하고 마을이 아이를 함께 키울 수 있도록 지원하겠습니다 또한 좋은 일자리와 산업혁신을 위해서는 평생학습체제가 뒷받침되어야 합니다 평생학습 참가율을 선진국 수준으로 끌어올리겠습니다 지금 우리가 누리는 풍요는 모두 어르신들의 희생 덕분입니다 그러나 어르신들은 노후대비를 할 겨를도 없이 급격한 가족구조 변화와 노동시장 변화로 극심한 어려움을 겪고 있습니다 이제 사회가 효도하겠습니다 참여정부가 도입했던 기초노령연금 장기요양보험을 대폭 강화하고 건강지원 방법을 새로운 차원으로 개선하겠습니다 노인 일자리를 늘리고 특히 그 연륜과 경험을 지역사회에 활용할 수 있는 방안도 마련하겠습니다 남녀의 실질적 평등을 위해서도 아직 남은 숙제가 많습니다 가사와 육아 노인을 돌보는 책임은 여전히 여성들에게만 맡겨져 있습니다 수준에 훨씬 못 미치는 여성 경제활동 참가율이나 세계 최저의 출산율은 대한민국의 여성들이 얼마나 힘들게 살고 있는지 잘 말해줍니다 가족 돌봄의 공적서비스를 확대해서 여성의 부담을 줄이겠습니다 취업과 승진기회의 제한 등 사회적 차별을 해소할 수 있는 적극적 대책도 만들겠습니다 남녀가 함께 일하고 함께 돌보는 사회로 전진하겠습니다 대한민국은 강하게 한반도는 평화롭게 만들겠습니다 국가의 존립과 국토방위는 헌법상 대통령에게 주어진 가장 막중한 의무입니다 모든 대외정책의 출발은 튼튼한 국방력입니다 대한민국 군을 강하고 유능한 군대로 만들겠습니다 미국과의 관계를 더욱 건강하고 바람직한 관계로 발전시키겠습니다 중국과 일본 러시아 등 주변국들과도 호혜협력 관계를 더욱 강화해 나가겠습니다 전쟁의 불안에서 한반도를 해방시키겠습니다 이명박 정부가 파탄에 빠뜨린 안보를 바로 세우겠습니다 새누리당 정권 아래서 분쟁과 대결로 얼룩졌던 휴전선과 일대를 평화경제 지대로 만들겠습니다 김대중 대통령의 공동선언과 노무현 대통령의 남북정상선언을 남북 양측이 책임 있게 지키고 이행하도록 하겠습니다 개성공단을 확장하고 금강산 관광을 재개하여 금강산과 설악산 평창을 연결하는 국제관광특구를 만들어 적극 키우겠습니다 남북 군사대결지대를 공동이익을 창출하는 경제지대로 전환하여 부모들이 안심하고 자식을 군대 보내는 안보환경을 만들겠습니다 특권층의 군대 안가기를 철저하게 막는 한편 젊은이들의 병역 부담을 줄여나가겠습니다 사병의 복지도 크게 향상시키겠습니다 북핵문제를 평화적으로 해결하고 한반도 평화체제를 구축하겠습니다 저는 북한의 핵을 용인할 수 없다는 확고한 입장을 가지고 있습니다 대화와 협상을 통해 반드시 핵을 포기하도록 만들겠습니다 실종된 자회담을 재개하고 대한민국의 주도적 역할을 복원하겠습니다 자회담과 남북관계 복원 평화체제 구축작업을 병행 추진하여 한반도에 평화와 공동번영의 선순환 구조를 만들어 나가겠습니다 그리고 그 속에서 새로운 성장동력을 찾겠습니다 순국선열과 민주영령 앞에서 약속드립니다 존경하는 국민 여러분 이 자리는 애국 민주 헌신이라는 세 가지 가치가 살아 숨 쉬는 역사의 현장입니다 저는 역사가 보는 앞에서 대통령 출마선언을 함으로써 역사 앞에 제 자신을 바치겠다는 결연한 의지를 밝힙니다 역사를 가슴에 새기고 미래를 향해 뚜벅뚜벅 걸어가겠다는 의지를 밝힙니다 저것은 넘을 수 없는 벽이라고 고개를 떨구고 있을 때 담쟁이 잎 하나는 담쟁이 잎 수천 개를 이끌고 결국 그 벽을 넘는다 도종환 담쟁이 도종환 시인의 담쟁이 라는 시의 일부입니다 우리 모두 담쟁이처럼 서로 두 손 꽉 잡고 벽을 넘읍시다 특권의 벽 차별의 벽 분단과 분열의 벽 패배주의의 벽을 넘읍시다 저 문재인과 함께 새로운 세상의 문을 엽시다 저 문재인은 겸손한 권력 따뜻한 나라를 만들겠습니다 국민의 마음에서 길을 찾는 우리나라 대통령이 되겠습니다 우리 모두가 주인인 진정한 우리나라 대통령이 되겠습니다 대단히 고맙습니다 '
import konlpy
hannanum = konlpy.tag.Hannanum()
hannanum.nouns("대한민국의 영토는 한반도와 그 부속도서로 한다")
['대한민국', '영토', '한반도', '부속도서']
nouns = hannanum.nouns(moon)
nouns
import pandas as pd
df_word = pd.DataFrame({'word' : nouns})
df_word

df_word['count'] = df_word['word'].str.len()
df_word

df_word = df_word.query('count >= 2')
df_word.sort_values('count')

df_word = df_word.groupby('word', as_index = False).agg(n = ('word', 'count')).sort_values('n', ascending = False)
df_word

top20 = df_word.head(20)
top20
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams.update({'font.family':'Malgun Gothic',
'figure.dpi':'120',
'figure.figsize':[6.5, 6]})
sns.barplot(data = top20, y = 'word', x = 'n')

지도 시각화
시군구별 인구 단계 구분도 만들기
import json
geo = json.load(open('SIG.geojson', encoding = 'UTF-8'))
https://github.com/youngwoos/Doit_Python/blob/main/Data/SIG.geojson
Doit_Python/Data/SIG.geojson at main · youngwoos/Doit_Python
<Do it! 쉽게 배우는 파이썬 데이터 분석> 저장소. Contribute to youngwoos/Doit_Python development by creating an account on GitHub.
github.com
geo['features'][0]['properties']
{'SIG_CD': '42110', 'SIG_ENG_NM': 'Chuncheon-si', 'SIG_KOR_NM': '춘천시'}
시군구별 인구 데이터 준비
import pandas as pd
df_pop = pd.read_csv('Population_SIG.csv')
df_pop.head()
https://github.com/youngwoos/Doit_Python/blob/main/Data/Population_SIG.csv
Doit_Python/Data/Population_SIG.csv at main · youngwoos/Doit_Python
<Do it! 쉽게 배우는 파이썬 데이터 분석> 저장소. Contribute to youngwoos/Doit_Python development by creating an account on GitHub.
github.com

df_pop.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 278 entries, 0 to 277
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 code 278 non-null int64
1 region 278 non-null object
2 pop 278 non-null int64
dtypes: int64(2), object(1)
memory usage: 6.6+ KB
df_pop['code'] = df_pop['code'].astype(str)
folium은 파이썬 데이터 인터랙티브 지도 패키지
단계 구분도 만들기
import folium
folium.Map(location = [35.95, 127.7],
zoom_start = 8)

map_sig = folium.Map(location = [35.95, 127.7],
zoom_start = 8,
tiles = 'cartodbpositron')
map_sig

folium.Choropleth(
geo_data = geo,
data = df_pop,
columns = ('code', 'pop'),
key_on = 'feature.properties.SIG_CD').add_to(map_sig)
map_sig

계급 구간 정하기
bins = list(df_pop['pop'].quantile([0, 0.2, 0.4, 0.6, 0.8, 1]))
bins
[8867.0, 50539.6, 142382.20000000004, 266978.6, 423107.20000000024, 13565450.0]
디자인 수정
map_sig = folium.Map(location = [35.95, 127.7], zoom_start = 8, tiles = 'cartodbpositron')
folium.Choropleth(geo_data = geo, data = df_pop, columns = ('code', 'pop'), key_on = 'feature.properties.SIG_CD', fill_color = 'YlGnBu', fill_opacity = 1, line_opacity = 0.5, bins = bins).add_to(map_sig)
map_sig

언터랙티브 그래프
마우스 움직임에 반응하며 실시간으로 모양이 변하는 그래프
산점도 만들기
import pandas as pd
mpg = pd.read_csv('mpg.csv')
import plotly.express as pxpx.scatter(data_frame = mpg, x = 'cty', y = 'hwy', color = 'drv')
import plotly.express as px
import plotly.io as pio
pio.renderers.default='iframe'
fig=px.scatter(data_frame = mpg, x = 'cty', y = 'hwy', color = 'drv')
fig.show()

통계 분석 기법을 이용한 가설 검정
가설 검정
통계 분석: 기술 통계, 추론 통계
기술 통계: 데이터를 요약해 설명하는 통계 분석
추론 통계: 어떤 값이 발생할 확률을 계산하는 통계 분석
통계적 가설 검정: 유의확률을 이용해 가설 검증하는 방법
유의확률: 실제로는 집단 간 차이가 없는데 우연히 차이가 있는 데이터가 추출될 확률
t 검정 - 두집단의 평균 비교하기
t 검정: 두 집단의 평균에 통계적으로 유의한 차이가 있는지 알아볼 떄 사용하는 통계 분석 기법
compact 자동차와 suv 자동차의 도시 연비 t감정
import pandas as pd
mpg = pd.read_csv('mpg.csv')
mpg.query('category in ["compact", "suv"]').groupby('category', as_index = False).agg(n = ('category', 'count'), mean = ('cty', 'mean'))

T검정에서 분산이란
데이터가 평균 값에서 흩어져 있는 정도를 수치화
분산이 작다: 평균근처에 몰려 있음
분산이 크다: 평균에서 퍼져 있음
등분산: equal var 두 집단의 퍼짐 정도가 비슷한 때
이분산: Unequal var 두 집단의 퍼짐이 완전히 다를 때
compact = mpg.query('category == "compact"')['cty']
suv = mpg.query('category == "suv"')['cty']
from scipy import stats
stats.ttest_ind(compact, suv, equal_var = True)
TtestResult(statistic=np.float64(11.917282584324107), pvalue=np.float64(2.3909550904711282e-21), df=np.float64(107.0))
일반 휘발유와 고급 휘발유의 도시 연비 t 검정
P-value:유의확률
0.0000000000000000239
0.05보다 매우 작은 결과
compact suv 두 집단간 연비차이가 우연일 확률은 거의 0%이다.
=>두 집단 연비는 통계적으로 확실히 차이가 난다.
mpg.query('fl in ["r", "p"]').groupby('fl', as_index = False).agg(n = ('fl', 'count'), mean = ('cty', 'mean'))

regular = mpg.query('fl == "r"')['cty']
premium = mpg.query('fl == "p"')['cty']
stats.ttest_ind(regular, premium, equal_var = True)
TtestResult(statistic=np.float64(-1.066182514588919), pvalue=np.float64(0.28752051088667036), df=np.float64(218.0))
우연일 확률 28.75
상관분석 - 두 변수의 관계 분석하기
상관분석: 두 연속 변수가 서로 관련이 있는지 검정하는 통계 분석 기법
실업자 수와 개인 소비 지출의 상관관계
economics = pd.read_csv('economics.csv')
economics[['unemploy', 'pce']].corr()#상관계수 계산해주는 함수: 두 변수간 관련성
#-1~1
#음수: 반비례성
#양수: 비례성

유의 확률 구하기
stats.pearsonr(economics['unemploy'], economics['pce'])
PearsonRResult(statistic=np.float64(0.614517614193208), pvalue=np.float64(6.773527303290177e-61))
상관행렬 히트맵 만들기
상관행렬 만들기
mtcar 데이터: 자동차 32종 11개 변수
https://github.com/youngwoos/Doit_Python/blob/main/Data/mtcars.csv
Doit_Python/Data/mtcars.csv at main · youngwoos/Doit_Python
<Do it! 쉽게 배우는 파이썬 데이터 분석> 저장소. Contribute to youngwoos/Doit_Python development by creating an account on GitHub.
github.com
mtcars = pd.read_csv('mtcars.csv')
mtcars.head()

car_cor = mtcars.corr()
car_cor = round(car_cor, 2)
car_cor

히트맵 만들기
import matplotlib.pyplot as plt
plt.rcParams.update({'figure.dpi':'120', 'figure.figsize':[7.5, 5.5]})
import seaborn as sns
sns.heatmap(car_cor, annot = True, cmap = 'RdBu')

대각 행렬 제거하기
import numpy as np
mask = np.zeros_like(car_cor)
mask
array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
히트맵에 mask 적용
sns.heatmap(data = car_cor,
annot = True,
cmap = 'RdBu',
mask = mask)

머신러닝을 이용한 예측 분석
머신러닝 모델 만들기 = 함수 만들기
머신 러닝 모델을 만들 때 두 종류의 변수 사용
예측 변수: 예측하는 데 활용하는 변수 또는 모델에 입력하는 값을 예측하는 변수(input)
타겟 변수: 예측하고자 하는 변수 또는 모델이 출력하는 값(output)
의사결정나무 모델: 순서대로 주어진 질문에 y/n로 답하면 마지막에 결론을 어는 구조
1. 타겟 변수를 가장 잘 분리하는 예측 변수 선택하기
2. 첫 번째 질문의 답변에 따라 데이터를 두 노드로 분할하기
3. 각 노드에서 타겟 변수를 가장 잘 분리하는 예측 변수 선택하기
4. 노드가 완벽하게 분리할 때까지 반복하기
의사결정나무 모델 특징
노드마다 분할 횟수가 다름
노드마다 선택되는 예측 변수가 다름
어떤 예측 변수는 모델에서 탈락함
의사결정트리 디시젼트리
불순도: 순수하지 않은 정도 ex순수도100% : 노드에 A데이터가 100%차지
ex불순도가 높다 : 노드에 a,b,c,d,e 등 여러 데이터 혼재
지니 계수 : 무작위로 하나를 뽑을 때 틀릴 확률
0~0.5
0 완전 순수
0.5 완벽하게 반반 (이진분류기준) 섞여 있음
엔트로피 : 정보의 무질서도
0~1
0 순수(불확실성없음)
1 최대의 불확실성 (반반섞인)
소득 예측 모델 만들기
import pandas as pd
df = pd.read_csv('adult.csv')
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 48842 entries, 0 to 48841
Data columns (total 15 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 age 48842 non-null int64
1 workclass 48842 non-null object
2 fnlwgt 48842 non-null int64
3 education 48842 non-null object
4 education_num 48842 non-null int64
5 marital_status 48842 non-null object
6 occupation 48842 non-null object
7 relationship 48842 non-null object
8 race 48842 non-null object
9 sex 48842 non-null object
10 capital_gain 48842 non-null int64
11 capital_loss 48842 non-null int64
12 hours_per_week 48842 non-null int64
13 native_country 48842 non-null object
14 income 48842 non-null object
dtypes: int64(6), object(9)
memory usage: 5.6+ MB
전처리하기
타겟 변수 전처리
df['income'].value_counts(normalize = True)
income
<=50K 0.760718
>50K 0.239282
Name: proportion, dtype: float64
import numpy as np
df['income'] = np.where(df['income'] == '>50K', 'high', 'low')
df['income'].value_counts(normalize = True)
income
low 0.760718
high 0.239282
Name: proportion, dtype: float64
불필요한 변수 제거
df = df.drop(columns = 'fnlwgt')
문자 타입 변수를 숫자 타입으로 바꾸기
원핫 인코딩하기
df_tmp = df[['sex']]
df_tmp.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 48842 entries, 0 to 48841
Data columns (total 1 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 sex 48842 non-null object
dtypes: object(1)
memory usage: 381.7+ KB
df_tmp['sex'].value_counts()
sex
Male 32650
Female 16192
Name: count, dtype: int64
df_tmp = pd.get_dummies(df_tmp)
df_tmp.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 48842 entries, 0 to 48841
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 sex_Female 48842 non-null bool
1 sex_Male 48842 non-null bool
dtypes: bool(2)
memory usage: 95.5 KB
df_tmp[['sex_Female', 'sex_Male']].head()

target = df['income']
df = df.drop(columns = 'income')
df = pd.get_dummies(df)
df['income'] = target
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 48842 entries, 0 to 48841
Columns: 108 entries, age to income
dtypes: bool(102), int64(5), object(1)
memory usage: 7.0+ MB
import numpy as np
df.info(max_cols = np.inf)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 48842 entries, 0 to 48841
Data columns (total 108 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 age 48842 non-null int64
1 education_num 48842 non-null int64
2 capital_gain 48842 non-null int64
3 capital_loss 48842 non-null int64
4 hours_per_week 48842 non-null int64
5 workclass_? 48842 non-null bool
6 workclass_Federal-gov 48842 non-null bool
7 workclass_Local-gov 48842 non-null bool
8 workclass_Never-worked 48842 non-null bool
9 workclass_Private 48842 non-null bool
10 workclass_Self-emp-inc 48842 non-null bool
11 workclass_Self-emp-not-inc 48842 non-null bool
12 workclass_State-gov 48842 non-null bool
13 workclass_Without-pay 48842 non-null bool
14 education_10th 48842 non-null bool
15 education_11th 48842 non-null bool
16 education_12th 48842 non-null bool
17 education_1st-4th 48842 non-null bool
18 education_5th-6th 48842 non-null bool
19 education_7th-8th 48842 non-null bool
20 education_9th 48842 non-null bool
21 education_Assoc-acdm 48842 non-null bool
22 education_Assoc-voc 48842 non-null bool
23 education_Bachelors 48842 non-null bool
24 education_Doctorate 48842 non-null bool
25 education_HS-grad 48842 non-null bool
26 education_Masters 48842 non-null bool
27 education_Preschool 48842 non-null bool
28 education_Prof-school 48842 non-null bool
29 education_Some-college 48842 non-null bool
30 marital_status_Divorced 48842 non-null bool
31 marital_status_Married-AF-spouse 48842 non-null bool
32 marital_status_Married-civ-spouse 48842 non-null bool
33 marital_status_Married-spouse-absent 48842 non-null bool
34 marital_status_Never-married 48842 non-null bool
35 marital_status_Separated 48842 non-null bool
36 marital_status_Widowed 48842 non-null bool
37 occupation_? 48842 non-null bool
38 occupation_Adm-clerical 48842 non-null bool
39 occupation_Armed-Forces 48842 non-null bool
40 occupation_Craft-repair 48842 non-null bool
41 occupation_Exec-managerial 48842 non-null bool
42 occupation_Farming-fishing 48842 non-null bool
43 occupation_Handlers-cleaners 48842 non-null bool
44 occupation_Machine-op-inspct 48842 non-null bool
45 occupation_Other-service 48842 non-null bool
46 occupation_Priv-house-serv 48842 non-null bool
47 occupation_Prof-specialty 48842 non-null bool
48 occupation_Protective-serv 48842 non-null bool
49 occupation_Sales 48842 non-null bool
50 occupation_Tech-support 48842 non-null bool
51 occupation_Transport-moving 48842 non-null bool
52 relationship_Husband 48842 non-null bool
53 relationship_Not-in-family 48842 non-null bool
54 relationship_Other-relative 48842 non-null bool
55 relationship_Own-child 48842 non-null bool
56 relationship_Unmarried 48842 non-null bool
57 relationship_Wife 48842 non-null bool
58 race_Amer-Indian-Eskimo 48842 non-null bool
59 race_Asian-Pac-Islander 48842 non-null bool
60 race_Black 48842 non-null bool
61 race_Other 48842 non-null bool
62 race_White 48842 non-null bool
63 sex_Female 48842 non-null bool
64 sex_Male 48842 non-null bool
65 native_country_? 48842 non-null bool
66 native_country_Cambodia 48842 non-null bool
67 native_country_Canada 48842 non-null bool
68 native_country_China 48842 non-null bool
69 native_country_Columbia 48842 non-null bool
70 native_country_Cuba 48842 non-null bool
71 native_country_Dominican-Republic 48842 non-null bool
72 native_country_Ecuador 48842 non-null bool
73 native_country_El-Salvador 48842 non-null bool
74 native_country_England 48842 non-null bool
75 native_country_France 48842 non-null bool
76 native_country_Germany 48842 non-null bool
77 native_country_Greece 48842 non-null bool
78 native_country_Guatemala 48842 non-null bool
79 native_country_Haiti 48842 non-null bool
80 native_country_Holand-Netherlands 48842 non-null bool
81 native_country_Honduras 48842 non-null bool
82 native_country_Hong 48842 non-null bool
83 native_country_Hungary 48842 non-null bool
84 native_country_India 48842 non-null bool
85 native_country_Iran 48842 non-null bool
86 native_country_Ireland 48842 non-null bool
87 native_country_Italy 48842 non-null bool
88 native_country_Jamaica 48842 non-null bool
89 native_country_Japan 48842 non-null bool
90 native_country_Laos 48842 non-null bool
91 native_country_Mexico 48842 non-null bool
92 native_country_Nicaragua 48842 non-null bool
93 native_country_Outlying-US(Guam-USVI-etc) 48842 non-null bool
94 native_country_Peru 48842 non-null bool
95 native_country_Philippines 48842 non-null bool
96 native_country_Poland 48842 non-null bool
97 native_country_Portugal 48842 non-null bool
98 native_country_Puerto-Rico 48842 non-null bool
99 native_country_Scotland 48842 non-null bool
100 native_country_South 48842 non-null bool
101 native_country_Taiwan 48842 non-null bool
102 native_country_Thailand 48842 non-null bool
103 native_country_Trinadad&Tobago 48842 non-null bool
104 native_country_United-States 48842 non-null bool
105 native_country_Vietnam 48842 non-null bool
106 native_country_Yugoslavia 48842 non-null bool
107 income 48842 non-null object
dtypes: bool(102), int64(5), object(1)
memory usage: 7.0+ MB
데이터 분할하기
모델을 만들 때 가지고 있는 모든 데이터 사용X, 일부만 무작위 추출
모든 데이터를 사용해 모델을 만들면 성능 평가 점수를 신뢰할 수 없음
크로스 밸리데이션: 데이터를 분할해 일부는 모델을 만들 때 사용하고 나머지는 평가할 때 사용하는 방법
ㄴ신뢰할 수 있는 성능 평가 점수를 얻는 방법
트레이닝 세트: 분할된 데이터 중 모델을 만들 때 사용하는 데이터
테스트 세트: 성능 평가할 때 사용하는 데이터
데이터 셋 분할 split
random state 없으면 실행마다 데이터가 다르게 섞임
from sklearn.model_selection import train_test_split
df_train, df_test = train_test_split(df, test_size = 0.3, stratify = df['income'], random_state = 1234)

의사결정나무 모델 만들기
모델 설정하기
from sklearn import tree
clf = tree.DecisionTreeClassifier(random_state = 1234, max_depth=3)
모델 만들기
train_x = df_train.drop(columns = 'income')
train_y = df_train['income']
model = clf.fit(X = train_x, y = train_y)
모델 구조 살펴보기
import matplotlib.pyplot as plt
plt.rcParams.update({'figure.dpi':'100',
'figure.figsize':[12,8]})
tree.plot_tree(model);

tree.plot_tree(model,
feature_names = train_x.columns,
class_names = ['high', 'low'],
proportion = True,
filled = True,
rounded = True,
impurity = False,
label = 'root',
fontsize = 10);

노드의 값
marital_status_Married-civ-spouse <=0.5 /분리 기준
samples = 100.0% /노드에 해당하는 관측치 비율
value = [0.239, 0.761] /타깃 변수의 클래스별 비율
class = low /우세한 클래스:0.5 기준
노드의 색
우세한 타겟 변수의 클래스에 따라 정해짐
노드의 색농도
한 클래스의 구성 비율이 우세한 정도를 나타냄
모델을 이용해 예측하기
예측 변수 추출
타겟 변수 추출
test_x = df_test.drop(columns = 'income')
test_y = df_test['income']
예측값 구하기
df_test['pred']=model.predict(test_x)
df_test

성능 평가하기
from sklearn.metrics import confusion_matrix
conf_mat = confusion_matrix(y_true = df_test['income'], y_pred = df_test['pred'], labels = ['high', 'low'])
conf_mat
array([[ 1801, 1705],
[ 582, 10565]])
예측0(부정) 예측1(긍정)
실제 :0부정 1801(정답) 1705 오답
실제 :1긍정 582(오답) 10565 정답
plt.rcParams.update(plt.rcParamsDefault)
from sklearn.metrics import ConfusionMatrixDisplay
p = ConfusionMatrixDisplay(confusion_matrix =conf_mat, display_labels = ('high', 'low'))
p.plot(cmap = 'Blues')
plt.show()

confusion matrix 해석
첫 번째 열 값
모델이 2383명 high로 예측
이중 실제 high인 사람 1801(정답)
이중 실제로 low인 사람 582(오답)
두 번째 열 값
모델이 12270명 low로 예측
이중 실제 low 10565명(정답)
이중 실제 high 1705(오답)
성능 평가 지표 구하기
Accuracy(정확도): 모델이 예측해서 맞춘 비율
Accuracy = (TP + TN) / (TP + TN + FP + FN)
import sklearn.metrics as metrics
metrics.accuracy_score(y_true = df_test['income'], y_pred = df_test['pred'])
0.8439227461953184
Precision(정밀도): 모델이 관심 클래스를 예측해서 맞춘 비율
Precision = TP / (TP + FP)
metrics.precision_score(y_true = df_test['income'], y_pred = df_test['pred'], pos_label = 'high')
0.7557700377675199
Recall(재현율): 실제 데이터에서 관심 클래스를 찾아낸 비율
Recall = TP / (TP + FN)
metrics.recall_score(y_true = df_test['income'], y_pred = df_test['pred'], pos_label = 'high')
0.5136908157444381
F1 score: recall과 precision의 조화 평균, 타켓 변수 클래스가 불균형해도 모델 성능 잘 표현
metrics.f1_score(y_true = df_test['income'], y_pred = df_test['pred'], pos_label = 'high')
0.6116488368143997
F1 = 2 / {(1 / Precision) + (1 / Recall)} = 2*{(Precision*Recall) / (Precision + Recall)}
Tkinter: TK GUI 툴킷에 대한 파이썬 바인딩, 표준 파이썬 인터페이스, 파이썬의 사실상 표준 GUI
https://docs.python.org/ko/3/library/tkinter.html#tkinter-modules
tkinter — Python interface to Tcl/Tk
Source code: Lib/tkinter/__init__.py The tkinter package (“Tk interface”) is the standard Python interface to the Tcl/Tk GUI toolkit. Both Tk and tkinter are available on most Unix platforms, inclu...
docs.python.org
https://076923.github.io/posts/Python-tkinter-1/
Python tkinter 강좌 : 제 1강 - GUI 생성
tkinter
076923.github.io
tkinter 사용

#tkinter PY표준 GUI
import tkinter
window=tkinter.Tk()
#toplevel 윈도우 창 생성
window.title("test")
window.geometry("1000x300")
window.resizable(False, False)
window.mainloop()
#UI 실행


3강 button
#tkinter PY표준 GUI
import tkinter
window=tkinter.Tk()
#toplevel 윈도우 창 생성
window.title("test")
window.geometry("1000x300")
window.resizable(False, False)
count=0
def countUP():
global count #전역변수 사용
count +=1
label.config(text=str(count))
label = tkinter.Label(window, text="0")
label.pack()
button = tkinter.Button(window, text="UP", command=countUP)#버튼 클릭시 자동 함수 연결
button.pack()

button = tkinter.Button(window, text="UP", command=countUP, repeatdelay=1000, repeatinterval=100)#버튼 클릭시 자동 함수 연결
4강 Entry
def calc(event):
label.config(text="결과="+str(eval(entry.get())))
entry=tkinter.Entry(window)
entry.bind("<Return>", calc)#키보드 입력 enter키와 bind 함수로 연동, 함수명
entry.pack()#배치
label=tkinter.Label(window)#라벨 생성
label.pack()#라벨 배치

5강 Listbox
listbox = tkinter.Listbox(window, selectmode='extended', height=0)
listbox.insert(0, "1번")
listbox.insert(1, "2번")
listbox.insert(2, "2번")
listbox.insert(3, "2번")
listbox.insert(4, "3번")
listbox.delete(1, 2)
listbox.pack()

listbox = tkinter.Listbox(window, selectmode='extended', height=0)
listbox.pack()
# Entry (텍스트 입력)
entry = tkinter.Entry(window, width=30)
entry.pack(pady=10)
# 초기 데이터
listbox.insert(0, "1번")
listbox.insert(1, "2번")
listbox.insert(2, "2번")
listbox.insert(3, "2번")
listbox.insert(4, "3번")
listbox.delete(1, 2)
# 1번 버튼: Entry 입력값을 리스트박스에 추가
def add_item():
text = entry.get()
if text: # 빈 문자열 방지
listbox.insert(tkinter.END, text)
entry.delete(0, tkinter.END)
# 2번 버튼: 첫 번째 항목 삭제
def delete_first():
if listbox.size() > 0:
listbox.delete(0)
# 3번 버튼: 리스트박스 초기화
def clear_list():
listbox.delete(0, tkinter.END)
btn1 = tkinter.Button(window, text="1번 버튼 (추가)", command=add_item)
btn1.pack(side="left", padx=10, pady=20)
btn2 = tkinter.Button(window, text="2번 버튼 (첫 항목 삭제)", command=delete_first)
btn2.pack(side="left", padx=10)
btn3 = tkinter.Button(window, text="3번 버튼 (초기화)", command=clear_list)
btn3.pack(side="left", padx=10)

정답
import tkinter as tk
def add_to_list():
content = entry.get()
if content:
listbox.insert(tk.END, content)
entry.delete(0, tk.END)
def delete_list():
listbox.delete(0)
def clear_list():
listbox.delete(0, tk.END)
window = tk.Tk()
window.title("list box test")
window.geometry("400x300")
entry=tk.Entry(window)
entry.pack()
btn1=tk.Button(window, text="리스트 추가", command=add_to_list, width=20)
btn1.pack()
btn2=tk.Button(window, text="첫요소 삭제", command=delete_list, width=20)
btn2.pack()
btn3=tk.Button(window, text="전체 삭제", command=clear_list, width=20)
btn3.pack()
listbox = tk.Listbox(window, width=30, height=10)
listbox.pack()
window.mainloop()

6강 Checkbutton
import tkinter
window=tkinter.Tk()
window.title("test")
window.geometry("640x480+100+100")
window.resizable(False, False)
def flash():
checkbutton1.flash()
CheckVariety_1=tkinter.IntVar()
CheckVariety_2=tkinter.IntVar()
checkbutton1=tkinter.Checkbutton(window, text="O", variable=CheckVariety_1, activebackground="blue")
checkbutton2=tkinter.Checkbutton(window, text="△", variable=CheckVariety_2)
checkbutton3=tkinter.Checkbutton(window, text="X", variable=CheckVariety_2, command=flash)
checkbutton1.pack()
checkbutton2.pack()
checkbutton3.pack()

def flash():
checkbutton1.flash()
checkbutton2.invoke()
CheckVariety_1=tkinter.IntVar()
CheckVariety_2=tkinter.IntVar()#버튼 깜빡임
CheckVariety_3=tkinter.IntVar()#버튼 눌림
checkbutton1=tkinter.Checkbutton(window, text="O", variable=CheckVariety_1, activebackground="blue")
checkbutton2=tkinter.Checkbutton(window, text="△", variable=CheckVariety_2)
checkbutton3=tkinter.Checkbutton(window, text="X", variable=CheckVariety_3, command=flash)
#서로 다른 체크 버튼에 같은 intVar가 지정되어 있으면 연동된다.
checkbutton1.pack()
checkbutton2.pack()
checkbutton3.pack()
7강 Radiobutton
import tkinter
window=tkinter.Tk()
window.title("test")
window.geometry("640x480+100+100")
window.resizable(False, False)
def check():
label.config(text= "RadioVariety_1 = " + str(RadioVariety_1.get()) + "\n" +
"RadioVariety_2 = " + str(RadioVariety_2.get()) + "\n\n" +
"Total = " + str(RadioVariety_1.get() + RadioVariety_2.get()))
RadioVariety_1=tkinter.IntVar()
RadioVariety_2=tkinter.IntVar()
radio1=tkinter.Radiobutton(window, text="1번", value=3, variable=RadioVariety_1, command=check)
radio1.pack()
radio2=tkinter.Radiobutton(window, text="2번(1번)", value=3, variable=RadioVariety_1, command=check)
radio2.pack()
radio3=tkinter.Radiobutton(window, text="3번", value=9, variable=RadioVariety_1, command=check)
radio3.pack()
label=tkinter.Label(window, text="None", height=5)
label.pack()
radio4=tkinter.Radiobutton(window, text="4번", value=12, variable=RadioVariety_2, command=check)
radio4.pack()
radio5=tkinter.Radiobutton(window, text="5번", value=15, variable=RadioVariety_2, command=check)
radio5.pack()
window.mainloop()
'로보테크AI' 카테고리의 다른 글
| 융합_로보테크 AI 자율주행 로봇 개발자 과정-26/01/15 (0) | 2026.01.15 |
|---|---|
| 융합_로보테크 AI 자율주행 로봇 개발자 과정-26/01/14 (0) | 2026.01.14 |
| 융합_로보테크 AI 자율주행 로봇 개발자 과정-26/01/12 (0) | 2026.01.12 |
| 융합_로보테크 AI 자율주행 로봇 개발자 과정-26/01/09[데이터 분석] (0) | 2026.01.09 |
| 융합_로보테크 AI 자율주행 로봇 개발자 과정-26/01/08 (0) | 2026.01.08 |
