[카테고리:] 생활코딩

  • ubuntu 16.04 dhcp renew

    ubuntu 16.04를 사용한다. 인터넷을 한창 사용하다 보면 연결이 끊긴다. 확증은 없지만 dhcp 문제인 듯. 아래와 같이 renew 하면 다시 된다!!

    sudo dhclient -r
    sudo dhclient 


  • ubuntu 바탕화면 바꿔주기

    사진을 찍는데 사용하지 않는다. 저장만 하기에는 자원 낭비라 강제로 바탕화면에 뿌리기로 했다. 전에 KDE 사용할 때, 일정 디렉토리에 넣으면 알아서 바꿔줬는데, gnome-shell은 안된다.

    variety를 사용하면 일정 폴더에서 자동으로 바꿔준다. 과거 wallch를 사용했는데 잘 안되었다.

    서버에서 일정 시간으로 특정 디렉토리로 무작위로 복사한다. 약 200개.

    데스크탑에서 아래와 같이 바탕화면 폴더로 저장한다.

    #!/bin/bash
    
    cd ~/바탕화면그림
    #과거 파일 삭제..
    find ~/바탕화면그림/ -type f -mtime +1 -exec mv {} ./toDelete \;
    #echo "hello"
    
    sftp ???@??? << EOT
    cd ????
    mget *
    quit
    EOT
    
    chmod 755 *
    
    #wallch --stop
    
    rm /home/now0930/바탕화면그림/toDelete/*.jpg
    rm /home/now0930/바탕화면그림/toDelete/*.JPG
    
    #wallch --change /home/now0930/바탕화면그림/ --clock 30
    
    
    #sleep 100
    #wallch --start
  • 웹 크롤러+워드클라우드

    웹 크롤러+워드클라우드

    python으로 보기싫은 좃선, 중앙 제안 키워드를 빼고 뉴스를 검색해 보자. 계획은 아래와 같다.

    • 웹 크롤러를 만들어 조선, 중앙 인터넷 페이지를 접속한다.
    • 헤드라인을 긁어 파일로 저장한다.
    • 파일을 읽어 워드클라우드로 주요 키워드를 확인한다.
    • 구글뉴스로 키워드를 검색어 제외한다.

    웹 크롤러는 인터넷에 많이 공개되어 있어 쉽게 만들었다. 코드 몇 줄로 원하는 기능을 구현했다. 어려웠던 점은 복사한 코드를 수정한 점이다. 인터넷 코드가 json 형식으로 파일을 저장했다. 이를 텍스트로 변경하는 과정에 문제가 있었다. csv의 writerow를 dictionary 인자로 넣으면 한 글자마다 컴마를 찍는다. dictionary를 [] 괄호로 감싸야 된다.

    워드클라우드 역시 쉽다. 한글폰트를 명시하여 generate하면 바로 된다. 나머지 부족한 부분(plot을 파일로 저장 등)을 과거 코드에서 복사해서 해결했다.

    구글뉴스가 – 기호로 검색어를 제외하는 기능을 제공한다. +키워드없이 모두 -로 넣으면 범위를 너무 크게 잡는다. 한국어, 최근 1주일 등 범위를 좁혔다. 검색어 제외와 보통 검색을 비교해 보면 좀 효과가 있는 듯 하다.

    # -*- coding: utf-8 -*-
    import requests
    from bs4 import BeautifulSoup
    import os
    import csv
    
    from wordcloud import WordCloud
    
    import matplotlib
    matplotlib.use('Agg')
    import matplotlib.pyplot as plt
    
    
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    
    req = requests.get('http://www.chosun.com/')
    req.encoding=None
    html = req.text
    
    
    soup = BeautifulSoup(html, 'html.parser')
    
    
    #조선일보는 dl형식으로 헤드라인을 작성한다.
    my_contents = soup.find_all('dl', {'class':'news_item'}, 'dt')
    
    
    data = {}
    
    
    #임의의 키를 만들어서 저장.
    index = 0
    
    for content in my_contents:
        data[index] = content.text
        index = index + 1
    
    
    ###중앙일보
    req = requests.get('https://joongang.joins.com/')
    req.encoding=None
    html = req.text
    soup = BeautifulSoup(html, 'html.parser')
    
    #중알일보는 li형식으로 헤드라인을 만든다.
    my_contents = soup.find_all('li')
    
    
    for content in my_contents:
        data[index] = content.text
        index = index + 1
    
    print(data.values())
    
    with open(os.path.join(BASE_DIR, 'result.csv'), 'w', encoding='utf8') as csv_file:
        writer = csv.writer(csv_file)
        for key in data.keys():
        #writer = csv.DictWriter(csv_file, data.keys())
        #writer = csv.writer(csv_file, delimiter=',')
            #print(data[key])
            writer.writerow([data[key]])
    
    csv_file.close()
    
    ##word cloud
    
    
    text = open(os.path.join(BASE_DIR, 'result.csv'), 'r', encoding='utf8').read()
    
    #한글 폰트를 사용하기 위해, 명시
    wordcloud = WordCloud(font_path='/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf', background_color='white').generate(text)
    
    plt.figure()
    plt.imshow(wordcloud, interpolation="bilinear")
    plt.axis("off")
    plt.show()
    plt.savefig('./wordcloud.jpg',format='jpg', dpi=300)
    

    고해상도 이미지를 원하면 아래와 같이 작업한다.

    wordcloud = WordCloud(width=800, height=400).generate(text)
    plt.figure( figsize=(20,10) )
    plt.imshow(wordcloud)

    참조 사이트

    https://datamod.tistory.com/104

    json으로 저장할 경우, utf8 방식으로 저장.

    https://beomi.github.io/2017/01/20/HowToMakeWebCrawler/

    웹 크롤러 기본.

    http://pythonstudy.xyz/python/article/403-%ED%8C%8C%EC%9D%B4%EC%8D%AC-Web-Scraping

    requests 한글 사용.

    https://twpower.github.io/84-how-to-use-beautiful-soup

    beautifulsoup 기본.

    https://medium.com/@gis10kwo/converting-nested-json-data-to-csv-using-python-pandas-dc6eddc69175

    json to csv, pandas

    https://www.programiz.com/python-programming/working-csv-files

    write to csv

    https://stackoverflow.com/questions/1816880/why-does-csvwriter-writerow-put-a-comma-after-each-character

    writerow 할 때, 각 글자뒤에 comma 삽입될 때.

    https://myjamong.tistory.com/48

    wordcloud 사용에 한글 폰트 설정

    https://stackoverflow.com/questions/28786534/increase-resolution-with-word-cloud-and-remove-empty-border/28795577

    고해상도 wordcloud

  • Qlik으로 수입지출 분석

    새로배운 Qlik으로 작년 수입/지출을 분석했다. 뱅크샐러드를 사용하면 1년간 수입/지출을 파일로 받을 수 있다. 인터넷에서 제공하고 있는 일별 주유가격과 내가 과거 사용한 주유비용을 보면 아래와 같다.

    • 2019년 2월에 가장 많이 소비했다.
    • 평균기름 가격이 다행히 19년 2월에 가장 쌌다.
    • 19년 2월 자동차 운행이 가장 많았다. 공사로 맨날 찰 끌고 다닌다는 듯.
    • 1년동안 340,000원 사용했다. 자동차 가동율이 너무 떨어졌다.
    • 1,200 원/리터, 15km/리터로 계산하면 약 일년에 4,275km 이동.
    • 수입: 월급 외 별도 수입이 거의 없음.
    • 지출의 23%가 카드로 결제 됨. 거의 생활비.
    • 지출의 22%를 대출 갚는데 사용.
    • 지출의 11%를 보험비로 지출.
    • 수입 – 지출 = -4,000,000원. 대출을 마이너스로 땡겨 갚았다.

    일단 데이터를 로딩하고, Qlik에서 항목을 수정했다.

    [과거 기름값]:
    LOAD
    	[번호],
    	[지역],
    	[상호],
    	[주소],
        [기간],
       	MakeDate(left([기간],4),mid([기간],5,2),right([기간],2)) as [날짜],
    	[상표],
    	[경유]
     FROM [lib://금융/과거_판매가격(주유소)20180308-20190308.csv]
    (txt, codepage is 949, embedded labels, delimiter is ',', msq);
    [필터된 경유]:
         load [경유],
         year([날짜])&'.'&month([날짜]) as [연월]
        Resident [과거 기름값];
    
    drop Table [과거 기름값];

    기름가격 날자가 “.” 로 구분되어 굳이 이렇게 구분해야 Qlik에서 인식했다. 추가 블럭에 이리 로딩한 [과거 기름값]을 부르고, 날자 포멧으로 수정했다. 연관성을 없애기 위해 [과거 기름값]을 지웠다.

    뱅크 샐러드에서 테이블을 부르면 카테고리가 대략 맞지만, qlik으로 원하는 부분을 수정하기 힘들다. 강력한 정규식을 지원하는 python pandas를 사용했다.

    #_*_ coding: utf-8 _*_
    
    import pandas as pd
    import numpy
    
    #Pandas로 업데이트
    df = pd.read_csv("./test.csv")
    
    #정규 표현식으로 다시 정리.
    conditions = [
            (df["내용"].str.contains("?????") & (df["대분류"] == "미분류")),
            (df["내용"].str.contains("성과급지급") & (df["대분류"] == "미분류")),
            (df["내용"].str.contains('\d{3}-\d{4}') & (df["대분류"] == "미분류")),
            (df["내용"].str.contains('마이너스|??|월급통장|??') & (df["대분류"] == "미분류")),
            (df["내용"].str.contains('????') & (df[">대분류"] == "미분류"))
            ]
    
    choices = ["급여","급여","보험","대출","기타수입"]
    
    df["급여"]=numpy.select(conditions, choices, default = df["대분류"])
    
    df.to_csv("./20190313.csv",index=True)

    pandas를 잘 사용하지 못해 시간을 많이 썼다. 그러나 qlik을 배워서 함보다 낫다.

  • flatpak에 설치한 steam을 다른 파티션에 인식하기

    I need someone to explain Steam as flatpak to me
    by inlinux_gaming

    Is it possible to move one of your flatpak installs (example – Steam client) off your root/home partition?

    It could technically be possible as there are some env vars I believe but its not necessarily designed to run off a usb drive or such.

    Is it possible to install Steam app on root/home partition, but all the games on a separate partition?

    Yes you can grant Steam access to a directory:

    flatpak override –filesystem=/mnt/foo/bar com.valvesoftware.Steam and then in Steam configure a games library in that directory.

    flatpak override --filesystem=/mnt/foo/bar com.valvesoftware.Steam