ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python 데이터분석 기초 25 - 웹 문서를 읽어 형태소 분석(konlpy) 후 단어 빈도 수 등을 출력, Series, DataFrame 출
    Python 데이터 분석 2022. 11. 3. 13:12

     

    # 웹 문서를 읽어 형태소 분석(konlpy) 후 단어 빈도 수 등을 출력
    
    import urllib
    from bs4 import BeautifulSoup
    from konlpy.tag import Okt
    from urllib import parse # 한글 인고딩
    
    okt = Okt()
    
    # searchPara = input('검색단어 : ') # 검색해서 사용 가능
    searchPara = "이순신"
    searchPara = parse.quote(searchPara)
    # print(searchPara) # 웹에서 검색할 때는 인코딩을 해주어야 된다.
    
    url = "https://ko.wikipedia.org/wiki/" + searchPara # 검색단어가 아닌 인코딩해서 받아야 된다.
    # url = "https://ko.wikipedia.org/wiki/%EC%9D%B4%EC%88%9C%EC%8B%A0" # 이 방법도 가능
    page = urllib.request.urlopen(url).read().decode()
    # print(page)
    
    soup = BeautifulSoup(page, 'lxml')
    # print(soup)
    
    wordlist = [] # 명사만 추출해서 기억
    
    for item in soup.select('#mw-content-text > div.mw-parser-output > p'):
        # print(item.string)
        if item.string != None:
            # print(item.string) # none을 제외한 글 호출
            wordlist += okt.nouns(item.string)
            
    print('wordlist :', wordlist, ', 단어수 :', len(wordlist))
    
    # {'당시':5, ...}
    word_dict = {} # 단어의 발생 횟수를 dict로 저장
    
    for i in wordlist:
        if i in word_dict:
            word_dict[i] += 1
        else:
            word_dict[i] = 1
            
    print('발생 단어 수 : \n', word_dict)
    print('발견된 단어 수(중복 제거) :' + str(len(set(wordlist))))
    # 중복을 제거하기 위해 list 타입을 set 타입으로 변경했다.
    
    print()
    print('결과를 Series로 출력')
    import pandas as pd
    
    woList = pd.Series(wordlist)
    print(woList[:3])
    print(woList.value_counts()[:5]) # 숫가가 큰 순서대로 출력
    
    print()
    print('결과를 DataFrame으로 출력')
    df1 = pd.DataFrame(wordlist, columns = ['단어'])
    print(df1.head(5))
    
    print()
    df2 = pd.DataFrame([word_dict.keys(), word_dict.values()])
    print(df2)
    
    df2 = df2.T
    df2.columns = ['단어', '빈도수']
    print(df2.head(5))
    #...
    
    
    <console>
    wordlist : ['당시', '조산', '만호', '이순신', '북방', '여진족', '약탈', '및', '침략', '예상', '수비', '위', '차례', '북', '병사', '이일', '추가', '병력', '요청', '모두', '거절', '이', '패전', '책임', '지게', '북', '병사', '이일', '이순신', '그', '책임', '이순신', '죄', '수금', '백의종군', '일본군', '조선', '군인', '꼴', '상한', '채', '음력', '말', '이순신', '함대', '전열', '정비', '부산', '출정', '당포', '경상우수사', '합류', '적', '동태', '대한', '보고', '입수', '그날', '전투', '시작', '음력', '아침', '화준', '구미', '일본군', '배', '척', '다대', '포', '앞바다', '배', '척', '서평', '포', '앞바다', '배', '척', '절영도', '배', '척', '부산', '앞바다', '적의', '소굴', '여', '척', '배', '중', '적선', '여', '척', '전투', '때', '배', '모두', '부수', '상륙', '일본군', '방법', '후일', '수륙', '공격', '위해', '함대', '원균', '대립', '각기', '정', '파적', '입장', '갈등', '심화', '선조', '실록', '선조', '수정', '실록', '두', '인물', '대한', '입장', '차이', '이', '대한', '논의', '당시', '뿐', '임진왜란', '논공', '행상', '자리', '진위', '및', '당부', '대한', '논란', '미국', '영국', '해군', '교과서', '책', '해전', '모든', '것', '휴먼', '앤', '북스', '이순신', '전설', '명장', '제독', '추앙', '반면', '원균', '조선', '수군', '산채', '매장', '최악', '제독', '평가', '적군', '배', '부', '것', '척', '그', '장수', '마다', '명량대첩비', '노량해전', '끝', '임진왜란', '선조', '실록', '사관', '당시', '사람', '모두', '이순신', '산', '왜놈', '격파', '말', '이순신', '용모', '대해', '이순신', '생전', '초상화', '그', '얼굴', '묘사', '기록', '남아', '뿐', '주화', '이순신', '제독', '복식', '이순신', '제독', '초상화', '중', '갑옷', '전립', '관복', '차림', '이순신', '초상화', '영의정', '예우', '실제', '이순신', '살아생전', '그', '복장', '현대', '서도', '충무공', '거의', '완전무결', '인물', '성자', '영웅', '것', '천관우', '등', '이순신', '대한', '평가', '아주', '이순신', '일기', '시조', '한시', '등', '여러', '편의', '작품'] , 단어수 : 240
    발생 단어 수 : 
     {'당시': 3, '조산': 1, '만호': 1, '이순신': 14, '북방': 1, '여진족': 1, '약탈': 1, '및': 2, '침략': 1, '예상': 1, '수비': 1, '위': 1, '차례': 1, '북': 2, '병사': 2, '이일': 2, '추가': 1, '병력': 1, '요청': 1, '모두': 3, '거절': 1, '이': 2, '패전': 1, '책임': 2, '지게': 1, '그': 4, '죄': 1, '수금': 1, '백의종군': 1, '일본군': 3, '조선': 2, '군인': 1, '꼴': 1, '상한': 1, '채': 1, '음력': 2, '말': 2, '함대': 2, '전열': 1, '정비': 1, '부산': 2, '출정': 1, '당포': 1, '경상우수사': 1, '합류': 1, '적': 1, '동태': 1, '대한': 5, '보고': 1, '입수': 1, '그날': 1, '전투': 2, '시작': 1, '아침': 1, '화준': 1, '구미': 1, '배': 7, '척': 7, '다대': 1, '포': 2, '앞바다': 3, '서평': 1, '절영도': 1, '적의': 1, '소굴': 1, '여': 2, '중': 2, '적선': 1, '때': 1, '부수': 1, '상륙': 1, '방법': 1, '후일': 1, '수륙': 1, '공격': 1, '위해': 1, '원균': 2, '대립': 1, '각기': 1, '정': 1, '파적': 1, '입장': 2, '갈등': 1, '심화': 1, '선조': 3, '실록': 3, '수정': 1, '두': 1, '인물': 2, '차이': 1, '논의': 1, '뿐': 2, '임진왜란': 2, '논공': 1, '행상': 1, '자리': 1, '진위': 1, '당부': 1, '논란': 1, '미국': 1, '영국': 1, '해군': 1, '교과서': 1, '책': 1, '해전': 1, '모든': 1, '것': 3, '휴먼': 1, '앤': 1, '북스': 1, '전설': 1, '명장': 1, '제독': 4, '추앙': 1, '반면': 1, '수군': 1, '산채': 1, '매장': 1, '최악': 1, '평가': 2, '적군': 1, '부': 1, '장수': 1, '마다': 1, '명량대첩비': 1, '노량해전': 1, '끝': 1, '사관': 1, '사람': 1, '산': 1, '왜놈': 1, '격파': 1, '용모': 1, '대해': 1, '생전': 1, '초상화': 3, '얼굴': 1, '묘사': 1, '기록': 1, '남아': 1, '주화': 1, '복식': 1, '갑옷': 1, '전립': 1, '관복': 1, '차림': 1, '영의정': 1, '예우': 1, '실제': 1, '살아생전': 1, '복장': 1, '현대': 1, '서도': 1, '충무공': 1, '거의': 1, '완전무결': 1, '성자': 1, '영웅': 1, '천관우': 1, '등': 2, '아주': 1, '일기': 1, '시조': 1, '한시': 1, '여러': 1, '편의': 1, '작품': 1}
    발견된 단어 수(중복 제거) :167
    
    결과를 Series로 출력
    0    당시
    1    조산
    2    만호
    dtype: object
    이순신    14
    척       7
    배       7
    대한      5
    그       4
    dtype: int64
    
    결과를 DataFrame으로 출력
        단어
    0   당시
    1   조산
    2   만호
    3  이순신
    4   북방
    
      0   1   2    3   4    5   6   7   8    ...  158 159 160 161 162 163 164 165 166
    0  당시  조산  만호  이순신  북방  여진족  약탈   및  침략  ...  천관우   등  아주  일기  시조  한시  여러  편의  작품
    1   3   1   1   14   1    1   1   2   1  ...    1   2   1   1   1   1   1   1   1
    
    [2 rows x 167 columns]
        단어 빈도수
    0   당시   3
    1   조산   1
    2   만호   1
    3  이순신  14
    4   북방   1

     

     

    댓글

Designed by Tistory.