반응형

이전에 올리다 말았던 텍스트마이닝 프로젝트를 포스팅 하려다가, 최근에 노트북을 포맷해서 Jupyter notebook가 사라진 것을 확인하고, 내꺼 설치하면서 쓰게 된 주피터 노트북 설치 포스팅.

주피터 노트북은 웹 기반으로 코드를 짤 수 있는 플랫폼? 쉘 이라고 보면 된다.

Python으로 시각화 자료 만들 때 파이참(PyCharm)보다는 주피터 노트북으로 짜는게 한줄한줄 결과도 보이고 가볍게 잘 돌아가서 나는 항상 주피터노트북을 사용한다!

설치 방법

PowerShell에서 pip install notebook 치면 끝!

* 단, 1) python이 설치되어 있어야하고, 2)자바 환경변수가 미리 셋팅되어 있어야한다.

1) python 설치: 아래 python 홈페이지에서 각 os에 맞는 버전 설치

https://www.python.org/downloads/

 

Download Python

The official home of the Python Programming Language

www.python.org

 

 

2) java 환경변수 설정: 아래 링크에서 확인

https://blog.naver.com/song_sec/221793561305

[Java] jdk 설치 및 java 환경변수 설정

Python, Android를 쓰려면 java가 필수적인데 얼마 전 PC를 포맷하다보니 Java가 없어 재설치하게 되...

blog.naver.com

1), 2)가 완료되어 있다면, Windows PowerShell에서

pip install notebook 타이핑 후 약 20초간 파일들이 다운로드 된다.

설치가 완료되면 다시 jupyer notebook을 타이핑해본다.

> jupyter notebook

그러면 아래 빨간색 박스 안에 notebook에 access 가능한 링크들이 나온다.

이 링크 중 하나를 복사하여(나는 .html을 복붙한다) chrome이나 익스플로러 주소창에 복사하면

나만의 jupyter notebook이 생성된다.

폴더 하나를 New로 만들어서 사용하는 것을 추천.

나는 V_Jane으로 만들었고, 이 디렉토리는 로컬디스크(C:) > Users > 본인이름 경로에서 확인 가능하다.

따라서, 저 디렉토리에 파일을 넣고 싶으면 웹을 통해 Upload하는 방법도 있지만

아래와 같이 해당 V_Jane 디렉토리에 파일을 옮겨도 Jupyter notebook에서 자동 연동되어 사용할 수 있기 때문에 파일 업로드 / 불러오기에 정말 편하다.

끝!!

반응형
반응형

이번 포스팅은 Linear Regression 구현으로 예제는 집 크기에 따른 집 값 예측을 하는 Housing prices(Example of ndrew Ng)이다.

1. Import, data loading

import num as np

import matplotlib.pyplot as plt

data = np.loadtxt("house_prices.txt", delimiter=",")

data #데이터 확인.

* 출력이 안예쁘다. numpy 패키지의 숫자 프린팅 옵션으로 숫자 포맷을 변경한다.

np.set_printoptions(suppress=True)

data

printoptions 함수는 아래 링크 참고.

https://docs.scipy.org/doc/numpy/reference/generated/numpy.set_printoptions.html

numpy.set_printoptions — NumPy v1.16 Manual

Scipy.org Docs NumPy v1.16 Manual NumPy Reference Routines Input and output index next previous numpy.set_printoptions numpy. set_printoptions ( precision=None , threshold=None , edgeitems=None , linewidth=None , suppress=None , nanstr=None , infstr=None , formatter=None , sign=None , floatmode=None...

docs.scipy.org

2. 데이터 셋을 X와 Y로 분리

x = data[:, :2] #모든 행 : 0, 1열

y= data[:, -1] #모든 행: 마지막 열. 이 문제에선 data[:,2]와 동일

3. 학습 데이터 및 테스트 데이터 분할

* 일부는 학습데이터에 활용하고, 일부는 학습 후 테스트 데이터로 활용함

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=4)

/*

- test_size: 테스트 데이터 비중. 여기선 값 중 20%만 테스트 값으로 하고 80%는 training data로 씀

- random_state: 랜덤으로 선택되는 데이터

random_state

:랜덤으로 선택하는 이유는 데이터가 이미 내림차순 등으로 정렬되어있을 경우 순서대로 50개를 뽑으면,

그건 랜덤학습이 아니라 이미 사람 손을 한번 탄 데이터임. 사람이 원하는 값이 나올 가능성이 높아짐.

중구난방으로 데이터를 학습시켜야 실제 예측값과 실제값이비슷하게 나올 수 있음.

*/

4. 학습 데이터와 테스트 데이터 plotting

plt.scatter(x_train[:,0], y_train, color='black') #학습데이터

plt.scatter(x_test[:,0], y_test, color='red') #테스트데이터

5. 선형회귀 모델 학습

model = linear_model.LinearRegression()

model.fit(x_train, y_train) #linearregression 모델에 x_train, y_train 학습

6. 테스트 데이터 넣어서 예측

result = model.predict(x_test)

7. 실제 가격과 예측 가격 비교

print(np.column_stack((x_test, y_test, result)))

#result가 6.에서 x_test로 돌린 예측 값인데 실제 값(y_test)과 거의 비슷하게 나옴.

첫 행의 집값은 314900이나, 예측값은 334034.---- 가 나왔음.

8. 그래프 제대로 그려보기

real = plt.scatter(x_test[:,0], y_test, color='red')

predict=plt.scatter(x_test[:,0], result, color='blue')

plt.legend((real, predict), ('real', 'prediction'))

plt.title('Real price vs. Predicted price')

plt.ylabel('Price')

plt.xlabel('House size')

plt.show()

9. 학습된 선형 모델과 예측 결과 plotting

plt.plot( [min(x_train[:,0]), max(x_train[:,0]) ],

[min(model.predict(x_train)), max(model.predict(x_train))])

#선을 그려보자. min <-> max간 선을 그려줌.

plt.scatter(x_test[:,0], y_test, color='red') #실제 결과

plt.scatter(x_test[:,0], result, color='blue') #예측한 결과

반응형
반응형

데이터마이닝 수업 듣다가.. 코드부분은 2학년때 배웠던 것들이라 슝슝 넘어가서 정리할겸 상세하게 써본다.

실습 예제는 iris data set이다. 여기서 0, 1행(Sepal length, Sepal width)를 data로 넣어 target(Type)을 구할 것이다.

1. 패키지 import

import numpy as np

import matplotlib.pyplot as plt

from matplotlib.colors improt Listed Colormap

from sklearn import neighbors, datasets

// import 와 from의 차이:

import 모듈: 모듈 전체 추출. 일반적으로 이걸 씀. 후자(from 모듈) 사용할 경우 해당 변수와 코드에서 사용하는 변수와 겹칠우려.

from 모듈 import 변수나 함수: 모듈에서 필요한 변/함수만 추출

2. 데이터 로딩

n_neighbors = 15 #최근접 이웃 개수 미리 설정. k=15

iris = datasets.load_iris() # sklearn에 기본적으로 내장된 iris 데이터셋 로딩

print(iris) #로딩한 데이터 확인

print(iris.keys()) #데이터셋 종류 확인(딕셔너리 키값)

3. 데이터 확인 # iris key중 두개 keys에 대해 값 확인

print(iris.data)

print(iris.target)

4. 속성 두 개 선택

X = iris.data[ :, :2] #행은 전체를 가져오고, 열은 속성값 2개만. 2개만해야 그래프 그릴때 보기 쉬움

Y = iris.target #X에 따른 결과값

5. 추후 그래프 색칠위해 컬러맵 세팅

# Create color maps # http://htmlcolorcodes.com/

cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF']) # RGB Hex code

cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])

6. 모델 생성, 데이터 피팅

#k-neighbors classifier를 생성하여 학습데이터에 맞춘다.

clf = neighbors.KNeighborsClassifier(n_neighbors, weights='uniform')

# weights='uniform' 거리 상관없이 주변에 있는 label들에 모두 동일한 점수를 측정하겠다.

clf.fit(X, Y)

사진 설명을 입력하세요.

7. 신규데이터 범위 세팅

#전체 영역 만들기

x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1 # 0열(sepal length)에서의 최소, 최대값

x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1 # 1열(sepal width)에서의 최소, 최대값

# 각 값을 출력해보자

8. 신규 좌표 만들기 - x1/x2축 눈금 확인 #np.meshgrid로 격자무늬 그물망 만듦

h= .02 #격자무늬 그물망 간격

xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, h), np.arange(x2_min, x2_max, h))

하나씩 뜯어보자.

np.arange(x1_min, x1_max, h) # h간격(0.02)로 x1_min(3.3) 에서 x1_max(8.9)까지 범위 설정

np.arange(x2_min, x2_max, h)

8.2. 신규 좌표 만들기 - X1/X2좌표 준비

h= .02 #격자무늬 그물망 간격

xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, h), np.arange(x2_min, x2_max, h)) #위랑 코드 같음.

X 좌표 Y 좌표

8.3. 신규 좌표 만들기 - X1/X2 매칭

x1/x2는 행렬 형태(2차원 배열)로 되어있으니 이것들을 1차원 배열로 바꿔줌

그게 xx1.ravel(), xx2.ravel().

그럼 각각은 220행 * 280열이었으니 61600행이 됨.

이것들을 쌍으로 만들어서 한 행렬로 만듦. 그럼 이것도 역시 61600행

np.c_[xx1.ravel(), xx2.ravel()]

9. Nearest Neighbor classification

z=clf.predict(np.c_[xx1.ravel(), xx2.ravel()])

#신규 샘플들에 대한 예측, 그 결과. target은 0, 1, 2뿐이었으므로 Z는 0, 1, 2만 있음

9-1. Z formatting

Z=Z.reshape(xx1.shape)

print(Z)

# z의 포맷(1차원)을 xx1 포맷(2차원)으로 바꿔줌.

for 그래프 그릴려고. 첨부터 2차원으로 하지 왜? -> predict는 2차원이 안됨

9-3. 그래프 준비

plt.figure() # 그래프 준비

plt.pcolormesh(xx1, xx2, Z, cmap=cmap_light)

/*

xx1, xx2를 pair로 점을 만들고, 그때 label에 해당하는 것이 z.

z는 위에서 0-2 사이 값이었고 . cmap_light는 아까 5번에서 3개 색을 넣어줬었음.

따라서 z가 0이라면 #FFAAAA 값이 그래프에 칠해짐.

*/

사진 설명을 입력하세요.

Z= 빨강: 0, 파랑: 1, 초록: 2

9-4. 학습 데이터 표시

plt.pcolormesh(xx1, xx2, Z, cmap=cmap_light) #배경(신규 좌표값, 그에 대한 예측결과를 표시)

plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=cmap_bold, edgecolor='k', s=20) # 학습데이터 점 찍고

plt.xlim(xx1.min(), xx1.max()) #x,y 축 범위 수동지정인데 여기선 의미가 없어보인다.

plt.ylim(xx2.min(), xx2.max())

plt.title("3-Class classification (k=%i, weights='%s')" % (n_neighbors, 'uniform')) #제목 찍기

plt.show()

결론

그래프의 배경(pcolormesh)은

기존 X,Y 데이터의 각 최소-최대값을 구해 0.02간격으로 데이터셋을 나눠 다시 만들어준 예측값(Z)들이다.

실제 값들은(X[:,0],X[:,1]===> y) scatter 로 더 진하게(cmap_bold) 그려줌.

결국 예측값이나 실제값이나 거의 똑같은 것을 볼 수 있음.

scatter의 초록-파랑부분에 색이 섞인 이유는,

k-nearest 하다보니 주위가 파랑이 더 많으면 파랑, 초록이 더 많으면 초록이 되다보니 겹치는 구간에 색이 저렇게 나타남.

다음은 linear regression

반응형
반응형

Python에서 xlsx을 돌리면 시간이 굉장히 오래 걸리고, 제약사항 또한 많기 때문에 csv를 사용한다.

하지만 대부분의 엑셀office에서는 xlsx 에서 csv 변환이 헷갈리고 잘 안되기 때문에 그냥 python에서 아래와 같은 방법을 사용해서 파일 변환을 할 수 있다.

Python 코드

################################

### xlsx -> csv 파일변환

em_df = pd.ExcelFile('employment_results.xlsx').parse(sheet_name=0, dtype=object, engine='xlrd', verbose=True)

 

# csv는 구분자로 ","를 쓰기 때문에, 혹시 데이터 중에 ","가 있다면 이게 구분자로 쓰일 수 있으므로

# 공백으로 치환 후 csv로 변환한다.

# 공백 치환은 안전하게 string이 있는 열에만 사용한다. em_df['입사기관명/진학학교명'] = em_df['입사기관명/진학학교명'].str.replace(',',' ')

#csv로 파일 변환 em_df.to_csv(path_or_buf='employment_results.csv', sep=',', header=True, index=False, mode='w', encoding='CP949')

#em_df에 해당 csv파일 삽입 em_df = pd.read_csv('employment_results.csv', engine='c', dtype=str, sep=',', encoding='CP949')

이제 파일 변환이 제대로 되었는지 describe()와 head()를 통해 확인해보자.

Python 코드

em_df.describe() em_df.head()

 

아주 잘 들어갔다.

Good!

반응형
반응형

wPython에서 pandas pkg를 이용하여 Dataframe 작업을 할 때 열 생성/변경/삭제 작업이 많다.

단순한 열 생성/변경/삭제 작업의 경우 간단하지만, 다수 개의 조건하에 있는 열 변경 작업은 생각이 조금 필요하다.

오늘 원소 값 변경을 위해 삽질을 여러 번 하다가.. 발견한 조건에 따른 원소 값 변경 코드를 정리해본다.

1. Dataframe 생성

original dataframe으로 Name, Gender 열을 가진 간단한 df를 생성했다. 이후에는 새로운 열을 생성하고, 그 열에 대한 원소값을 변경할 것이다.

a = pd.DataFrame({'Name':['Jane','Young','Tester','Tester2'], 'Gender':['man','woman','woman','man']}) print('***** original dataframe *****') print() print(a)

2. 조건에 따른 Dataframe에 새로운 Column 생성

나는 python의 loc 와 str.contains 함수를 사용할 것이므로, 이것을 먼저 간단하게 알아보고 넘어간다.

x.loc: label(값)을 이용하여 values 그룹에 접근(indexing)하는 것.

아래 예시(Example)과 같이 label(값 = viper)에 따른 값들을 출력해주는 method이다.

str.contains: string에서 아주 유용한 함수로, 인자값에 따른 문자열을 찾아준다.

예를들어, a={"장미", "집", "배나무", "매화는 매실의 ", "가나다", "abc", "꽂", "꼽", "꽁", "꼿꼿"} 라는 배열에서 a.str.contains("꽃")을 실행하면 "꽃"을 포함한 모든 단어를 출력할 수 있다.

즉, '기업명' 이라는 열에서 'xx전자'라는 이름을 가진 기업명을 찾아 '업무분야' 라는 카테고리를 새로 만든 후, '전자'라는 값을 삽입한다고 치자. 그럴 경우 기업명엔 '삼성전자', 'LG전자', 'ABC전자'등 많은 값이 있을 지라도 이 분류는 '전자'로 처리될 수 있다.

그러면 이제 나의 예시에서 loc와 contains method를 함께 사용해본다.

a.loc[a['Gender'].str.contains("wo")]) # a['Gender']열에서 "wo"가 포함된 값의 grp을 찾는다.

그 결과값으로 1, 2번 값들이 출력된다.

그러면 이제 해당 값("wo")을 가진 그룹에 'category'라는 column을 추가하여 '여자'라는 값을 생성한다.

a.loc[a['Gender'].str.contains("wo"), 'category'] ='여자' print(a)

3. 기존 Dataframe에 새로운 조건 삽입

2번에서 category가 '여자'라고 설정된 a dataframe에 새로운 조건을 적용해본다.

a.loc[a['Gender'].str.contains("man"), 'category'] ='사람' #man이 포함된 경우 '사람'을 입력한다. print(a)

* np.where()

: 배열 요소를 검색해 인덱스를 반환. 검색 조건을 응용하여 True, False 형태로 많이 사용함.

(예시) 1. dataframe에서 '입사기관명/진학학교명' 값들의 대분류를 만들기 위해, 기존 df에 'Category' 열을 삽입하고, '화학' or '에너지' or 환경 키워드를 포함한 입사원들에 대해 '화학.에너지.환경'의 데이터를 category로 입력해준다.

1) 초기 dataframe의 행은 3511명의 data로 구성되어 있다. 3번 순번을 가진 사람은 'LG화학'에 입사했으므로 'Category'열에 '화학.에너지.환경'이라는 값을 가질 것이다.

2) '화학' or '에너지' or '환경' 키워드를 포함한 입사기관명/진학학교명을 찾아, 그 값이 포함되었을 경우 'True', 미포함했을 경우 'False'로 값이 생성된다.

em_df['Category'] = em_df['입사기관명/진학학교명'].str.contains('화학' or '에너지' or '환경') em_df.head()

3) 그리고 True값을 가진 열을 '화학.에너지.환경'으로 값을 치환시킨다.

em_df['Category'] = np.where(em_df['Category']==True,'화학·에너지·환경', em_df['Category']) em_df.head()

4) 치환이 잘 됐는지 확인해본다.

2, 49, 66, ... 번의 사람들이 화학/에너지/환경 분야에 취업또는 진학했다.

*** 하지만 이렇게 np.where, str.contains을 사용해서는 여러 조건에 대한 값을 변경할 수 없다.

왜냐? 화학.에너지.환경으로 이미 바뀐 값들이 텔레캅/미작성에 대해 True/False를 다시 하게되면,

이전 바뀌었던 화학.에너지.환경은, 텔레캅/미작성 조건에서는 False가 되어버리기 때문이다.

+ str.contains에서 or을 쓸 경우 앞의 값만 체크가 된다! '미작성'값 Category는 '테스트중'으로 바뀌지 않았다.

즉, 여러 조건을 중첩하여 값을 바꿀 때엔 아래와 같이 loc를 사용해야한다.

em_df.loc[em_df['입사기관명/진학학교명'].str.contains("화학"), 'category'] ='화학' em_df.loc[em_df['입사기관명/진학학교명'].str.contains("텔레캅"), 'category'] ='테스트중' em_df.head()

오늘 몇 시간 삽질한 결과.... 다행히 정리됐다.

구글링을 많이 해봤지만 loc를 여러 조건을 통해 중첩시키는 예제는 없고,

중첩되는 조건을 쓰는 건 쉬운 숫자값들밖에 없었다.

+ 내용은 제대로 안알려주고 광고만 덕지덕지 붙은 티스토리, 네이버블로그 들까지...

나는 정말 나뿐만 아니라 남들에게도 도움이 되는 글을 쓰고싶다. 

오늘의 삽질 끄읕!!

 

반응형
반응형

[텍스트마이닝] 유튜브 크리에이터 비교 및 분석 with python

이것은 3학년 텍스트마이닝 수업 과제로 진행했던 유튜버 크리에이터 분석이다. 오늘부터 차근차근 정리해보려고 한다. : )

1. 분석할 데이터 및 목표

- 유튜브 인기채널인 '펭수'와 '워크맨'을 전반적으로 크롤링.

- 어떤영상이 인기가 가장 많은지, 인기가 많은 요인은 무엇인지 게시글 및 댓글 분석

* 기존에 네이버부동산을 크롤링하여 원하는 조건(평수, 지역, 지하철역 등)에 따라 집을 추천해주는 추천서비스를 만들어보려 하였으나, 태그를 크롤링해오지 못하는 문제가 있어 주제를 변경함ㅜㅜ

 

1-2. DataSet 소개

1) 최종적으로는 2개의 Dataset

: 펭수 및 워크맨 영상(paw), 각 동영상별 댓글(paw_reply)

* 펭수 및 워크맨은 각각 1개의 dataset이나 결국 2개를 1개로 합침(paw)

2) 코드 파일은 총 4개

- 1, 2: 는 각 영상(Pengsu, workman)의 dataset 분석 코드

- 3: 1,2를 합친 코드 + 머신러닝

- 4: 3을 통해 NMF(Non-negative matrix factorization, NMF)를 진행한 것

2. 코드 설명

2-1. Pengsu, Workman Dataset 코드: 펭수 및 워크맨 코드 개별 구현 후 전처리에서 병합.

1) 패키지 import: 두 파일 모두 동일

* Konlpy: 한국어 분석을 위한 패키지. 형태소 분석, 명사 분석 등 한국어에 특화된 분석 가능

- Konlpy를 사용하기 위해서는 부가적으로 java설치 및 환경변수 설정 등 먼 여행을 떠나야한다.

이건 추후 포스팅

* selenium: 웹 브라우저를 제어하는 패키지. 유투브 화면 클릭, 스크롤 제어 등에 사용

# 패키지 import

import datetime as dt

import pandas as pd

import requests

import time

import urllib.request #

import re

import konlpy

from bs4 import BeautifulSoup

from pandas import DataFrame

from selenium.webdriver import Chrome

from selenium.webdriver.chrome.options import Options

from selenium.webdriver.common.keys import Keys

2) Data 입력: Chrome Driver, Crawling

Chrome Driver를 통해 별도 창을 Open 후, 해당 창에서 data를 crawling함

스크롤 다운이 필요한 페이지이므로 스크롤제어를 사용.

* num_of_pagedowns를 조정하여 스크롤 횟수를 지정

#크롬드라이버 연결

delay=0.1

browser = Chrome()

browser.implicitly_wait(delay)

start_url = 'https://www.youtube.com/channel/UCtckgmUcpzqGnzcs7xEqMzQ/videos'

browser.get(start_url)

browser.maximize_window()

body = browser.find_element_by_tag_name('body')#스크롤하기 위해 소스 추출

num_of_pagedowns = 30

#스크롤 다운

while num_of_pagedowns:

body.send_keys(Keys.PAGE_DOWN)

time.sleep(0.1)

num_of_pagedowns -= 1

이를 실행하면 아래와 같이 추가적인 창이 실행된다. (미리 크롬드라이버 설치필요. 설치 링크는 아래!)

https://countrymouse.tistory.com/entry/ChromeDriver

 

크롬드라이버(Chrome Driver) 설치, 다운로드

텍스트마이닝을 업로드하던 중 사전 진행필요한 절차가 많아 크롬드라이버 설치 및 konlpy등을 먼저 포스팅. 크롬드라이버는 crawling을 위해 필요한 프로그램으로 크롤링 시 추가적인 창을 띄워

countrymouse.tistory.com

 

# 페이지 소스 받아오기

html0 = browser.page_source

html = BeautifulSoup(html0,'html.parser')

# 리스트 선언

title_list = [] #제목 리스트 생성

href_list = [] #주소 리스트 생성

viewcountmake_list = [] #조회수 크롤링 위한 리스트 생성

viewcount_list = [] #조회수 리스트 생성

# 구독자 수 저장

subsc = html.find(id="subscriber-count").text

subsc = subsc[4:]

# title 저장

for tr in html.find_all(id="video-title"):

title = tr.get('title')

title_list.append(title)

#href 태그 내용 저장

for tr in html.find_all(id="video-title"):

href = tr.get('href')

href_list.append(href)

# 조회수 저장

for tr in html.find_all('span', class_="style-scope ytd-grid-video-renderer"):

viewcount = tr.get_text('span')

viewcountmake_list.append(viewcount)

contents_count = len(title_list)

#구독자수, 동영상 수

print("구독자 수:",subsc, ",영상 개수:", contents_count)

간단하게 썸네일에 있는 정보로 dataframe을 만들어서 값을 잘 받아왔는지 확인해본다.

intro_df = pd.DataFrame({'구분': "펭수", '구독자':subsc, '영상수':contents_count}, index = [1])

intro_df.head()

#전처리 전 title, 주소, 좋아요수 데이터프레임 생성

print(len(title_list), len(href_list), len(viewcountmake_list))

# viewcountmake_list의 경우 조회수와 등록일이 각각 생성되어 list크기가 다름 -> 데이터프레임 생성 불가

# 데이터 클리닝 작업(조회수와 등록일에서 등록일 제거)

for tr in range(0,len(viewcountmake_list),2):

a = viewcountmake_list[tr]

viewcount_list.append(a)

# 조회수 데이터 전처리

clean_viewcount = []

for i in viewcount_list:

a = i[4:-2]

amul = float(a)*10000

clean_viewcount.append(int(amul))

print(clean_viewcount)

#title, 주소, 좋아요수 데이터프레임 생성

peng_list = pd.DataFrame({'title':title_list, 'href':href_list, 'viewcount':clean_viewcount})

peng_list.head()

#viewcount순으로 정렬

peng_list.sort_values(by=['viewcount'], axis=0, ascending=False)

여기까지 영상에 대한 기본적인 dataframe이 저장되었다.

글이 많이 길어지는 관계로 다음 화에서는 각 영상별 제목 / 본문내용 / 조회수 / 좋아요 / 싫어요 / 작성일 / 주소 dataframe을 생성,

그 후에는 시각화 및 머신러닝을 진행할 예정이다!

 

반응형

+ Recent posts