앞에서까지는 head, tail, dim, str, summary함수를 통해서 전반적인 분석하려는 데이터의 구조의 변수개수. 행의개수, 속성, 특징 등을 분석해 보았다.하지만 자신이 분석하려는 데이터가 자신이 만든 데이터가 아닌 외부 데이터를 분석하려 한다고 하자. 하지만 만약 그 데이터의 변수의 이름이 알아보기 어렵기에 변수명을 수정해 본다는 케이스를 가정해 보자. 만약 자신이 알아보기 쉬운 변수명으로 바꾼다면 더 수월히 데이터를 다룰 수 있는것은 당연하다.실제로 데이터 변수명이 h0901_4와 같은 그냥 보면 대체 무슨 의미를 가졌는지 궁금증을 유발하는 변수명도 매우 많다. 본격적으로 변수명을 바꾸는것을 실습해보자. 변수명을 바꾸기 위해서는 rename()이라는 함수가 필요하다. 이 rename()이..
전체 글
주로 백엔드, 클라우드 인프라 주제를 다룹니다이번에는 앞에서 보았던 데이터 구조 분석을 이용하여 ggplot2패키지 안에 존재하는 테스트데이터인 mpg data의 구조를 분석해 보자.만약 ggplot2패키지를 다운받지 않았다면 install.packages("ggplot2") 를 실행하여 ggplot2패키지를 설치해 주자. 만약 자신이 ggplot2를 기존에 설치한적이 있다면 library("ggplot2")를 통해 해당 패키지를 호출해주자. 우선 ggplot2의 mpg데이터에 대한 데이터 프레임을 만들어주자. as.data.frame()함수를 이용하면 해당 데이터의 속성(자료형)을 데이터 프레임 형태로 바꿀 수 있다. as.data.frame()의 매개변수로는 data.frame()과 동일하게 데이터 프레임으로 만들 데이터를 넣어주면 된다. 여기..
1 . 데이터를 파악해보자. 데이터가 주어졌다고 하자. 그렇다면 우리는 무엇을 해주어야될까? 당연히 해당 데이터에 대한 파악이 필요할 것이다. 어떠한 변수들이 존재하고 얼마나 많은 데이터 수가 있는지(행의 개수) 등 전반적인 데이터의 구조를 봐야할 필요가 있는것이다. 그렇다면 데이터에 대한 구조파악을 어떻게 해야할까? R언어에는 이 데이터들을 파악할 수 있게 도와주는 함수들이 존재한다. 지금부터 데이터 구조를 파악하기 위해 도와주는 함수들을 살펴보자. 2 . 데이터 파악을 도와주는 함수들(해당 포스트에서는 .csv파일을 이용하였다.) 1) head(), tail()함수 head와 tail함수는 데이터의 일부분만 출력하여 데이터 형태를 파악할 때 쓰는 함수이다. head()함수는 기본적으로 해당 데이터의 ..
1 . R이란 무엇인가? R이란 데이터를 분석하는데 사용되는 소프트웨어이다. R은 범용 분석 툴로, 통계분석,머신러닝 모델링, 텍스트 마이닝, 네트워크 분석, 지도시각화, 주식분석 등 다양한 상황과 분야에서 다양하게 접목시킬 수 있다. 또한 R은 오픈소스이다. 그렇기에 다양한 패키지가 생성되어있어 해당 패키지를 install.packages를 이용해 다운받은후 다양히 사용하는것도 가능하다. 2 . ENV만들기 R을 하기 위해서는 R과 R 스튜디오가 필요하다.우선 https://cran.r-project.org/ 사이트를 들어가서 자신의 운영체제와 맞는 R파일을 설치해준다. 그 다음 R GUI(Graphic User Interface)를 실행하자. R GUI란 R의 소스코드를 작성할 수 있는 소프트웨어이다..
(Codes : https://github.com/J-Hoplin/Algorithm-with-Python/tree/master/4%20.%20Double%20Linked%20List)1 . Doubly Linked List 앞에서 보았던 연결리스트는 단일 연결 리스트(Singly Linked List)였다. 연결리스트는 배열과 같이 물리적 메모리적 메모리가 아닌 링크라는 형식의 개념을 사용하기에 관리하기가 매우 쉬웠다. 하지만 단일 연결리스트의 한계가 있다. 바로 일방성이라는것이다. 한방향으로만 나아갈 수 있을뿐 그와 반대방향으로 링크를 시킬 수 없다는 단점이 존재한다. 앞으로 볼 이중 연결리스트는 단일 연결리스트와 달리 양방향성을 지니고 있다.다음 사진을 보자. 임의의 링크는 자신의 다음 링크도 가리키..
1 . Neural Network 앞에서 다루어왔던 퍼셉트론의 장점과 단점을 살펴보자. 우선 장점이라면 엄청 복잡한 함수도 쉽게 표현할 수 있다는 것이다.(예를 들면 앞에서 말했듯이 퍼셉트론으로만으로도 컴퓨터를 구현할 수 있다.). 하지만 반대로 단점이라면 우리가 앞에서 AND, NAND, OR, XOR게이트를 봤듯이 진리표를 보면서 가중치와 임계값에 대한 매개변수를 사람이 수동적으로 넣어주어야 한다는 한계점이 있다. 이러한 퍼셉트론의 단점은 신경망, 흔히 말하는 Neural Network를 사용하면 해결할 수 있다. 신경망을 이용하면 가중치에 대한 매개변수의 적정값을 입력데이터를 통해 자동으로 학습하게 할 수 있기 때문이다. 우선적으로 이번 포스팅에서는 입력데이터의 식별 처리과정을 다뤄볼 것이다. 신경..
클래스 안에는 우리가 함수들을 여러개 선언하여 클래스라는 객체를 생성하고 인스턴스를 생성해 사용한다.여기서 우리가 클래스 안에 내장된 함수들을 흔히 '메소드'라고 하는데 일반적으로 우리 인스턴스 메소드라 하는것은 개별적으로 동작하는 함수들을 생성하고자 할 때 사용한다. 인스턴스 함수는 일반적인 클래스에서 봤듯이 첫번째 인자로는 인스턴스를 가리키는 self가 들어가고 그 다음 인자들을 받는다. 밑의 코드에서의 __init__과 graduate과 같은 함수들이 일반적으로 흔히 말하는 인스턴스 메소드이다. 123456789class school(): count = 0 def __init__(self,ID,age): #초기화함수 __init__또한 인스턴스 메서드이다. self.ID = ID self.age =..
NULL 포인터란 메모리가 할당되지 않은 포인터를 의미한다. NULL포인터는 아무것도 가리키지 않는 상태를 의미한다. 즉 NULL포인터의 경우에는 참조연산자를 이용한 역참조가 되지 않는다. 123456789#include int main(){ int *ptr = NULL; printf("%p\n", ptr); return 0;} cs 다음 코드를 보자. int형 포인터 ptr에는 NULL이라는 값이 들어가있다. 그 밑에서 해당 포인터의 주소를 이스케이프 시퀸스 %p를 이용해 출력해보면 다음과 같이 주소값이 0으로 된 상태로 출력되는것을 볼 수 있다. 그렇다면 이 NULL포인터는 어떨때 쓸까? NULL포인터는 밑의 코드와 같이 만약 메모리 값이 NULL이라면 메모리를 할당하는 과정에 사용하기도 한다. 12..
(주의 : 절대 코드 확장자를 .cpp로 쓰지 말것) 포인터를 할 때 포인터를 이용해 변수의 메모리 주소를 포인터에 저장해서 사용하기도 하였다. 다른 경우는 우리는 배열에 크기를 정해주고 사용하기도 하였다. 하지만 이번에는 scanf를 통해 메모리 공간을 사용자가 직접 원하는 만큼 메모리 공간을 사용하도록 해보자. scanf를 통해 원하는 만큼 메모리 공간을 지정한다는 문구를 잘 생각해보자. scanf를 통해 입력을 받고 해당 크기만큼 배열이 생성된다. 기본적으로 scanf를 통해 값을 넣는다는 것은 프로그램이 실행되고 나서의 일이다. 반면 배열에 크기를 미리 지정해주는것은 코드를 작성할 때의 일, 즉 프로그램이 실행되기 전의 일이다. 전자와 같이 프로그램이 실행되고있는 시간동안 사용할 메모리 공간을 할..
Microsoft Visual Studio 2017 Community버전을 쓰다보면 scanf를 쓰게되면 scanf_s로 쓰라고 권장을 하면서 오류가 난다. scanf와 scanf_s함수는 표준 입력하는데 있어서 쓰이는 함수이다. 차이점이라면 scanf_s는 scanf의 버퍼 오버플로우등 다양한 보안상의 문제를 보안한 함수이다. 최상위 버전에서는 SDL, Security Development Lifecycle검사가 체크되어있어 비주얼 스튜디오에서는 scanf_s가 없으면 오류가 난다. scanf, scanf_s의 문법은 거의 동일하다. 단 %s 를 통한 문자열을 받을 때는 입력개수를 인자로 한개를 더 넣어주어야 한다.일반적인 gcc-compiler상에서 문자열을 받는다면(gcc의 대표적인예시 : Dev-..
조건 : 1) 최대 100개까지의 책을 저장할 수 있다. 2) 구조체로 책의 이름, 저자, 발행일을 저장한다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384#include#include#define _CRT_SECURE_NO_WARNINGS#define max 100 typedef struct info { char name[100]; char author[100]; char date[100];}info; int addbook(int count, info *in){ if..
프로그래밍 단계는 다음과 같이 이루어 진다. 문제의 이해 -> 논리의 설계 -> 코딩 -> 번역 -> 테스트 -> 활용 다음과 같은 단계들이 있는데 이중 순서도는 프로그램 논리 설계 과정에서 쓰인다. 순서도란 문제 해결에 쓰인 논리를 단계적으로 그림으로 표현한 것을 말한다. 또한 순서도를 이용하면 명령문들의 관계를 시각적으로 보여줄 수 있다. 순서도 작성하는데 있어 방법은 다음과 같다. 1) 명령문의 기능에 해당하는 의미를 지닌 도형을 그림.2) 명령문의 정확한 순서를 파악하기 위해 화살표를 이용해서 흐름을 그림 대부분의 프로그램은 입력, 처리, 출력 기본적인 이 세가지 단계를 모두 지니고 있다.이제 순서도의 기호들에는 어떤것들이 있는지 살펴보자. 1) 단말(terminator) 이 기호는 단말(term..
(코드 : https://github.com/J-Hoplin/Machine-Learning-with-Python/blob/master/3%20.%20Perceptron.ipynb) 1 . Perceptron Algorithm 퍼셉트론 이라는 1957년 프랑크 로젠블라트에 의해 제안된 알고리즘이 있다. 이 퍼셉트론 알고리즘은 딥러닝(신경망)의 기원이 되는 알고리즘이다. 즉 앞으로 딥러닝을 배우는데 베이스 개념을 배운다고 생각하시면 됩니다. 퍼셉트론은 다수의 신호를 입력받은 후 하나의 신호값만 출력한다. 신호를 생각할때, 그냥 전류처럼 어떠한 흐르는 값이라 생각하면 됩니다. 퍼셉트론 신호 또한 흐름을 만들고 정보를 그 다음 순서로 전달한다. 퍼셉트론은 신호가 흐른다(1)/흐리지 않는다(0) 두가지 값을 가질..
*주피터 노트북이 없다면 주피터 노트북 다운과 활용법을 알고 보세요 *파이썬이 잘 잡혀있지 않는다면 하지 않는거를 추천드립니다 (잘 잡혀있다 기준(주관) : 모듈, 예외처리,패키지,클래스,함수에 대한 개념 이해가 되었고 활용까지 가능한 사람) 1 . Numpy Numpy는 외부 라이브러리이다. ‘외부’ 라이브러리란 일반 파이썬에서 포함되지 않은 라이브러리라는 의미이다. (Numpy를 깔고오지 않으신 분들은 깔고오는걸 추천한다) 우선 Numpy를 import 해보자 라이브러리를 읽기 위해서는 import문을 해준다. Import numpy as np를 해석하면 numpy라이브러리를 np라는 이름으로 가져오라는 뜻이다. 그 다음 numpy라이브러리를 생성해 보자. numpy배열을 만들 때는 np.array(..
1 . Linked List Linked List는 대부분의 알고리즘에서 사용하는 자료구조이다. 알고리즘에서 사용하는 데이터와 다음 노드(Node)를 가리키는 링크(Link)를 묶어 노드로 정의해 사용한다. C 혹은 C++의 개념에서는 포인터 개념을 링크로 사용하지만 파이썬은 해당 개념이 존재하지 않는다. 우선 용어부터 알아보자. 연결리스트에는 기본적으로 링크와 노드 라는 용어를 사용한다. 파이썬에서 연결리스트를 사용하기 위해서는 노드를 클래스로 정의하여 사용한다. 1234class Node: def __init__(self,data,link = None): self.data = data self.link = linkcs 이 클래스의 경우 호출 시 __init__메서드를 호출하고 Node라는 클래스는 d..
1 . O표기법 최악, 최선의 성능중 최악의 성능에 해당한다. 최악의 성능을 평가하는 이유는 적어도 일정 정도의 성능은 보장한다는 의미이다. O 표기법은 알고리즘의 성능을 평가하기 위해 처리해야할 데이터의 양에 대한 실행시간을 수학적으로 계산한 방법이다 O 표기법에는 다음과 같은 7가지의 방법이 존재한다. 1) O(1) : 이와 같은 성능을 갖는 알고리즘은 처리해야 할 데이터의 양과는 상관없이 항상 일정한 실행시간을 갖는 알고리즘을 의미한다. 2) O(log2N) : 이와 같은 성능을 갖는 알고리즘은 처리해야 할 데이터의 양이 증가할수록 실행 시간도 약간씩 증가하는 알고리즘을 의미한다. 실행 시간의 증가폭 자체가 logN의 그래프를 가지므로 급격하게 증가하지는 않는다. 일반적으로 효율이 좋은 검색 알고리..