좋은글2020. 12. 11. 19:44

벌써 2020년 원더키드의 해가 끝이 얼마 안남았다. 이 길고 짧았던 올해 내내 해오던 고민 중 하나가 석박 과정 전환이었다. 과연 내가 잘 할 수 있을까 그리고 회사에서 하던 업무와 같이 잘 병행할 수 있을까 라는 질문을 하면서 나에 대한 자신감이 없다보니 부정적으로 생각하였다.  어려운 논문의 연속으로 자신감 하락과 손과 머리가 굳어지는 내 나이와 급속도로 하락하는 내 체력에 대한 불신이 가장 컸다.  연구실 젊은 친구들과 하는것도 즐겁긴 하지만 같이 템포 맞춰 갈려면 많은 정신적 육체적 노력이 필요하니까 말이다.  게다가 박사과정에 걸맞는 좋은 논문과 교수님의 기대 수준에 대한 부응도 당연히 생각해야 하니 더 부담이 드는건 당연하다. 게다가 가장 큰 원인은 바로 COVID-19가 터지면서 비대면 수업이 늘어났다. 초반은 사이버 대학원보다도 못하다는 생각이 들었다. 2018년도 나의 삶에서 가장 큰 부분 중 하나였던 모두의 연구소에서도 주장하는 것처럼 인터넷에는 가장 빠르고 양질의 정보가 쏟아져 나오고 잘만 소화한다면 대학원보다 좋은 연구를 많이 할 수 있다라는 경험에서도 비롯되었다. 부담을 계속 받고 같이 연구할 수 있는 동료들이 있는 연구 환경을 더 가져가고 싶어 박사과정을 생각한거지만 ROI도 따지면 졸업후 나이가 최소 43이고 고생만 하고 상처만 남은 영광이 되지 않을까 온갖 부정적으로도 많이 생각을 했다. 그리고 내가 하겠다고 결심한다고 되는게 아니라 회사 대표님과 멤버들의 동의가 당연히 먼저 필요했고 교수님의 컨펌이 최종적으로 필요한 것이었다.

 

그렇지만 결국 내면 깊은 곳에는 박사과정을 하고 싶다라는 생각을 하고 나선 흔들리지 않았던 것같다. 박사과정에 대한 명분을 고민하기 시작했고 회사 멤버들하고 얘기를 하다가 하면 좋은 이유에 대해서 하나씩 찬찬히 곱씹어 보았다. AI 팀장이 박사과정이면 회사 이미지 및 홍보에도 긍정적이고 랩실 세미나와 동료들의 연구들을 통해서 좋은 딥러닝 기술들을 회사 AI에 탑재할 수 있다라는 것, 또한 좋은 논문 실적과 특허로 회사에 가치를 계속 올려가는데 도움을 줄 수 있고 나 또한 회사 업무와 병행해서 학위와 회사일을 동시에 잡을 수 있겠다라는 명분들이 갖추어졌다. 무엇보다 가장 큰 이유는 부족함을 채우자라는 것이다. 올해부터 시작된 연구미팅은 가을학기에서부터 본격적으로 임하기 시작했고 얼마나 내 연구나 방향이 엉망인지 뼈저리게 느꼈다. 그리고 얼마가지 않아 자기 비관적인 생각을 많이 하게 되었다. 왜 이렇게 되었을까 고민을 했고 이유는 다음과 같은 이유에서였다.

 

1. 연구자의 자세와 습관 :  연구 미팅 데드라인에 맞춰서 스트레스만 받고 온갖 부정적인 생각은 혼자 다하고 살았다. 그리고 데드라인 임박해서 즉흥적으로 생각하고 그때만 모면하는 스킬이 조금 늘어다. 결국 쌓이는 것 없이 벼락치기 공부같이 남는것 없이 늦은 시간까지 땜빵하느라 몸만 고생하고 스트레스는 쌓이고 자신감 넘치는 모습은 어디가고 비관주의자 하나가 되버린 내 모습에 화가 나는 것도 아니고 그냥 슬퍼지기까지 했다.

 

2. 연구 방향 : 나중에 박사 학위를 위해서 디펜스와 졸업논문에는 관련 논문이 2~3편 이상은 실려야 하고 이게 결이 같아야한다. 간단한 아이디어가지고 논문을 내는건 석사과정이고 긴 호흡이 필요하다 어떤 연구분야를 빨리 잡고 거기에 내 생각을 막 펼치는 거도 중요하지만 먼저 선행되야 하는건 어떤 연구 방향을 잡아야할 지 생각을 해야 하고 난 이번 주에 그 방향이 여러 갈랫길이 나오겠지만 한 물꼬를 찾아주는 논문을 찾았다. 이것으로 그 방향을 선점할려고 한다. 닙스에도 accept이 되었으니 우선 그 값어치는 그걸로 대신해도 되겠다.

 

3. 생각의 축적 : 상훈이의 연구미팅을 보면 혀를 내두르고 싶다. 핵심과 목적이 전달받고 연구미팅에서도 본인이 읽은 논문들을 다 하나씩 찝어 가면서 필요한 부분만 짚고 넘어가며 자신의 생각을 Pros와 Cons를 얘기하는데 너무 멋졌다. 그러면서도 그 친구는 자신이 부족하고 배움에 대한 열정이 흘러 넘친다. 나도 그 친구처럼 글씨도 잘쓰고 문서도 기가 막히게 잘 만들고 싶다라는 생각이 들면서 동기부여를 주는 상대라고 생각한다. 그는 내 학교 동기이다. 영광이라고 생각한다.

 

4. 구체적인 사고와 실행능력 : 실험을 하기도 전에 Accuracy가 안나올것 같고 내 아이디어에 자신감 없이는 이 구체적인 사고는 힘들다. 또한 선행 연구에 대한 파악부터 구현까지 해보는 건 당연하다. From Scratch로 하는 연구가 아닌 이상 이전 연구자들이 해놓은 결과물에 대한 명확한 해석과 구현을 직접 하고 돌려보면서 내 아이디어가 과연 컨트리뷰션이 있는지 그 가능성을 그 구체화 과정을 반복하면서 approximate를 해야한다고 생각이 든다. 실행능력은 코드 구현도 있지만 아이디어를 계속 구체화하는 것이 필요하다라는 생각이 들었다. 나는 이전처럼 다시 블로그를 이렇게 하고 그리고 또한 Notion에 논문에 대한 내용을 손으로 써내려가는 연습과 그리고 A4지에 내 생각을 계속 끄적여 대는것을 이제 해볼려고 한다. 

 

5. 결과에 대한 아웃풋 만들어내는 능력 : 결과에 대해서 해석을 하고 어떤 의의가 있는지를 어필하는 것 그리고 내가 고생해서 만든것에 대한것을 잘 아웃풋으로 만들어서 남기고 많은 사람에게 교감을 얻는 것. 그리고 그게 공개되고도 계속 회자가 되고 사람들이 찾아주는 것은 요즘 같은 세상에서는 너무나 중요한 스킬이라고 생각한다. 

 

6. 딜리버리 및 회고 :  가장 고참인 현구의 연구미팅 문서와 발표를 보면서 참 많은 배움이 있었다. 그에 비해 나는 한참 배워야할 게 많았고 그 오랜 회사생활동안 뭐했나 싶을 정도로 조바심이 나기도 했다. 장표가 시각적으로 좋을 필요는 없지만 실험에 대한 구체적인 생각과 그 과정, 결과가 전달되기 위해 어떻게 할지 항상 생각을 하고 간결하게 표현하여 청중들의 공감을 사는 능력은 과히 부러울만 하다. 나는 올해 연구미팅에서 처음부터 지금까지 구체적이지도 못했고 어슬렁 잡은 연구 아이디어라 항상 끝에 말이 흐려지는 것은 당연했다. 초반에는 어떤 연구를 하겠다라고 들고 갔지만 멀티에이전트 연구를 멀티 엘레베이터 콘트롤하겠다고 한 것은 참 에너지 소모가 너무 컸다. 고생한 것 대비 머리보다는 손과 마음만 애쓴 연구라 지금 생각해봐도 속이 상하다. 그만 이제 속상하자. 이걸 회고라고 적고 있다니.

 

 

하지만 부정적인 회고를 했지만 이제 나는 연구다운 연구를 할 수 있겠다라는 생각이 들어서 박사과정을 선택했다. 여태까지의 허성생활을 청산하고 멋진 시작을 다시 하면 된다. 이제 3학기가 끝나가지만 석박과정을 선택했으니 코스웍은 무려 절반이 남았으니 그 절반을 제대로 해보고자 한다. 수업도 열심히 임하고 많은 재미난 연구를 하고 내 노력을 내 스스로 인정받고 싶다.

 

 

 

 

 

Posted by 억사마
데이터분석2017. 4. 24. 15:19

BmxMainRice_Kickoff.pptx



'데이터분석' 카테고리의 다른 글

Kaggler's Day #9  (0) 2017.01.12
Kaggler's Day #8  (0) 2016.06.10
Kaggler's Day #7  (0) 2016.06.08
Kaggler's Day #6  (0) 2016.05.31
Kaggler's Day #5  (0) 2016.05.27
Posted by 억사마
카테고리 없음2017. 3. 27. 20:57

사실 이 블로그에는 뭔가 awesome한 것만 올릴려고 했으나 이실직고 솔직한 얘기도 적어볼까 한다. 사건은 토요일부터 발생한다. 어떤 알고리즘이 좋을까 싶어서 문제에 대한 정말 brief한 내용을 적고 알고리즘 추천해주세요라고 올렸고 그 며칠전에는 Mac에서 모니터로 HDMI단자를 연결했더니 speak out이 계속 HDMI로 나가서 이걸 어떻게 earphone 단자로 output을 fix하냐고 물어봤다가 downvote를 무려 이 질문에만 7개를 받았다. 실제로 point가 14점이나 깍이는 아주 바보같은 짓이었다. 거기에 대한 답도 안달아주고 코멘트로 달아주는 식이 고작이거나 아예 답이 없는 경우도 있다.  그러다가 별 신경을 안썼으나 아닐까 다를까 moderator라고 stackoverflow사이트를 정화하시는(?) 청소부 (top score)들이 아니 뭐.. 경고성 메일을 보냈다. 최근에 질문들이 down-vote들을 너무 받았으니 링크 보내줄테니 읽어보고 앞으로 좀 질문해주지 않겠느냐라고..


아래는 안되는 영어로 한번 그냥 일기 형식으로 적었다. 여튼 경고성 메일로 적어준 걸 정리를 해보자면 


첫째, 무조건 질문을 하기전에 생각을 좀 해라, 그리고 그 질문을 잘 찾아봐서 혹시 이전에 답한 것들을 찾으면 그대로 따르고 아니면 그 답이 없는 링크를 가지고 이 문제가 아직 해결이 안되었다는 것을 환기시키라


둘째, 답변 해주는 사람들로부터 좋은 배경설명과 그리고 재현을 위한 조건까지 언급해서 make them engaged and interested in the problem이라는 겁니다. 


셋째, 태그 같은경우도 관련된 것을 다 넣을라고 했는데 이건 호불호가 갈릴듯, 어떤 모더레이터는 경고를 하는 경우도 있습니다. 태그를 쓸데없이 많이 달았다고 말입니다. 그리고 어떤 경우에 [] 같은것을 써서 제목 앞에 붙이는데 무조건 다 tag영역으로 빼라고 합니다. 제목 적을 칸도 부족하다는것을 명심


넷째, 제목에 특히 문법, 구두점, 스펠링을 특히 조심하고 성의를 보여줘야 한다. 예를 들면 바쁜 고객에게 상품 설명을 아주 짧은 시간에 한 killing sentence로 끝낸다는 생각으로 말이지요.


그리고 마지막으로 Markdown을 잘 활용하는게 관건입니다. 질문을 있어보이게 하고, 그리고 가독성을 높여주니까요!


--------------------------------------------  아래는 안되는 영어로 한번 그냥 일기 형식으로 적었다. 여튼 경고성 메일로 적어준 걸 정리를 해보자면 


Today I want to talk about my shameful experience about using stackoverflow site. Actually, I am not a native speaker of English so that I am not good at asking my complex problems or issues in English. Anyway, I asked some questions without thinkging hastily and there was no answer about those questions and gave down-votes. I thought how a questison can be good so many times. But, still I am not good at doing that. This includes questisons in my native languages. So I got a private message from the moderators of stackoverflow. I want to write about that. Of course, I want to write down about how a question become good one through their recommendations.


First of all, the warning message like the followings.



We've noticed that you've asked many questions recently, a large number of which were not well received by other members of our community.


Specifically, many of your questions were downvoted and closed because they seemed to be hastily written, or of the type that we'd prefer users refrain from asking. This is a troubling pattern; we'd like to make sure that you've read the help that we have available for asking questions. Please take some time to read all of the information linked below prior to asking another question:


An overview of how our system works

A brief guide on how to ask questions

A short summary of questions we permit

Help on formatting your questions

We recommend taking a look at highly upvoted questions within the tags that interest you as examples of how to ask better questions. We really want you to have a good experience here, and the first step to that is making sure that your questions are clear, on topic and provide all of the information someone would need to answer.


Regards,

Bhargav Rao

Stack Overflow moderator


I was so ashamed of it. Anyway I replied that I will take a look at your links and promised to ask a well-formed questions from now on.


First !! How do I ask a good question?

 - In advance I ask, Please find the previous questions with answers. If there is no other one, Please attach a link that it quarantee for this quesiton not to have been solved yet. 

 - Title is so important so that we have to summarize the specific problem. Unless the title is not interesting, potential good answerers won't read the question at all. And spelling, grammer and punctuation are so important! If you have have poor English, ask a friend who are fluent and do proof-read it for you? But it takes time.. But the more you spend asking a question, the better answer you would get. I promise it based on my previous experiences in stack overflow.


 Examples:


Bad: C# Math Confusion

Good: Why does using float instead of int give me different results when all of my inputs are integers?

Bad: [php] session doubt

Good: How can I redirect users to different pages based on session data in PHP?

Bad: android if else problems

Good: Why does str == "value" evaluate to false when str is set to "value"?


Introduce the problem before you paste code 


Start by expanding on the summary you put in the title. Explain how you encountered the problem(background) and list any difficulites that have prevented you from solving it yourself and make it engaging and informative as possible 


Help other reproduce the problem!!

-> I think this is really important part. I saw some good questions with a background they encountered the problem so that answerers can reoccur the problem in their local. It is really important. I guess if you have a very unique problem, this becomes more important as you know.


Include all relevant tags

-> I can not agree in some cases. Because I asked so many questsions. But some moderators pointed out this thing. Don't attach too many tags. 


Proof-read before posting.

Please before you post your questions, please read through it from start to end. Pretend you're seeing it for the first time. Check whether or not you miss something specific.


Post the question and wait for a moment in your broswer to have a rapid feedback

Maybe in this case, it probably possible that someone corrected your quetsion. Please read and check. If it is correct, change it rapidly! 



But to be honest, this is really imporant. The markdown makes really the question to be good-looking and easy to understand.

Here is the markdown for stackoverflow

  






Posted by 억사마

오후 금일 4시간짜리 IBM Bluemix 선수과정을 들여댜보았습니다.

Bluemix가 Barematal에서부터 Container, VM, CloudFoundry, OpenWhisk까지 다 지원을 하는데

CF에 어플리케이션 등록/배포하는걸 실제 해보며 BlueMix 라는 큰 플랫폼을 살짝 들여다보았습니다.

 

우선 로컬의 Node JS어플리케이션(DB포함)을 CLI와 Ecilpse Plugin을 통해  등록/배포하는 과정이 아주 심플하네요,

또한 DB툴 또한 제공하여 플랫폼에서 데이터 수정이 가능하네요. 미국 남부, 호주 시드니, 영국에 주요 거점으로

128군데의 데이터센터가 있다네요. 그리고 130개의 구성가능한 서비스가 매력적입니다.

Watson API부터 TWC(The weather company)데이터까지 가져다 쓸수 있으며 데이터 분석 서비스또한 NoSQL, SQL DB

물론 ElasticSearch지원하구요 또한 IoT나 DevOps등에 대한 환경 관리도 가능합니다. 이 모든걸 서비스라 총칭하여 구분합니다.

 

데브옵스쪽을 업무유관이니 교육가서 5주간 더 깊게 들여다보겠습니다.

개인적으로 스타트업정도는 아니지만 간단한 서비스를 만들려고 하는데 OpenWhisk라는걸 사용하면 꽤 합리적인 요금으로

클라우드 사용도 가능할 것 같습니다.  AWS의 Labmda와 같이 미들웨어 없이 클라우드에 앱 등록하면 이를 통해 비지니스 처리를

해주는 서비스인데 사용한만큼만 요금을 낼수 있는 기똥찬 서비스네요.  상당히 맘에 듭니다 오픈소스화가 되어 있고 한번 뜯어봐도

좋을거 같네요. 정말 말그대로 SaaS도 Application/Data영역만 신경쓰는게 아니라 더 나뉘어져서 비지니스로직만 신경써주게 하는

그런게 트랜드인가보네요. 한번씩 만들어봐도 좋을것같습니다.

 

그리고 선수과정은 아래들어가서 ID만들고 가입하고 들으시면 됩니다. 빠르게 보면 할거 다하면서 3시간 이내로 봅니다.

그리고 Bluemix도 1 Month Free Trial을 제공하니 써봐도 좋구요.

참, IBM에 Open Badge가 있는데 MOOC의 Verified Certificate처럼 나중에 유용할 수료증도 준다고 합니다.

 

○ 사전 교육 (필수 학습)

   아래 Link로 들어가시면, IBM Bluemix Essential 이라는 온라인 교육을 진행할 수 있습니다. 
   https://developer.ibm.com/courses/all-courses/bluemix-essentials/

 

Posted by 억사마
데이터분석/Excel & VBA2017. 3. 15. 20:08

Prerequisite

 Excel fuction

  . DCOUNT

  . INDEX

  . RANDBETWEEN

 VBA

 

Excel : 4_DECISION_TREE_CASE_STUDY_마케팅엔지니어코리아_이정훈.xlsm

 

 


 

First of all, Let's suppose that we have some information and whether they buy computer or not about customers so that we want to extract good factor to predict for customer to buy computer like the following.  Like the decision tree, we want to make many rules that also get a percentage of people who bought the computer. .

 

In this case, we can make 4 variables to save a value from RANDBETWEEN(). First two variables, the value's range would be between 1 and 4 and will point out the index of the column to be used. (the two values above the table below). Next two variables's range would between 1 and 14 and point out a index of rows number to be used as a condition's value. (the two values under the table below)Then we can use DCOUNT function to count up rows that has 1 value in the last column where it was converted bit value that means whether or not a customer boiught a computer.

 

 

 

we almost to finish a preparation to generate the rule. The last step is to make VBA macro that clear the region where it displays and copy the rule increasing row number. The vba logic is like the followings.

 

Sub RULE_GENERATOR()


    Range("O2").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
    Range("O2").Select


For K = 1 To 1000
    Range("O2").Offset(K - 1, 0) = K
    Range("O2").Offset(K - 1, 1) = Range("M3")
Next K


End Sub

 

It's done!

 

 

 

※ 멀티캠퍼스에서 진행되는 이정훈의 데이터분석과정 자료임을 밝힙니다.

Posted by 억사마

Posted by 억사마
데이터분석2017. 1. 12. 11:52

늦게 연재하는 9번째 Kaggler's Day입니다. 

이번 차수에서는 직접 Kaggle Competition에 올라온걸 EDA에서 그치는게 아니라 직접 예측 모델까지 돌려서 예측까지 해보는걸 해볼려고 합니다. 우선 오늘은 데이터셋 탐색까지 진행토록 하곘습니다.


주제는 부동산 가격 예측(여기)입니다.

 아이오와주의 에이메스(Ames)라는 도시의 부동산 가격 에측을 할려고 합니다. 80여개의 다양한 주택 관련 피쳐를 제공하고 이를 가지고 부동산 가격을 예측하는게 목표인데요, 한국 부동산 시장하고는 미국 부동산 시장은 참 많이 다른것 같습니다. 왜냐하면 한국하면 지하철 역세권 여부와 거리,  좋은 학군에 속하는 학교와 거리 등등이 중요하다고 보면 여기 피쳐들은 몇 개는 일부 유관해보이지만 대부분의 피쳐가 집의 상태들이 중요합니다. 


데이터를 한번 살펴보겠습니다.



LotFrontAge


Street 의 경우 두가지 타입중에서 자갈일 경우는 싸고,  pave는 다양하게 걸쳐져 있다

Alley(골목)도 마찬가지로 Pave가  Gravel보다 높은 가격을 대체적으로 형성


Lotshape의 경우은 IR 시리즈보다 가격이 Reg로 된 집이 좀 낮다


LandContour도 마찬가지로 가격이 타입별로 다르게 형성

Utilities는  AllPubs가 가격범위가 크고 NoSeWa는 거의 1.5? 고정

NeighborHood는 확실히 동네가 어디인지에 따라 가격대가 다르게 형성

YearBuilt 확실히 오래된 아파트는 비싼게 없군

HouseStyle 1층과 2층짜리 집이 가격이 높게 형성

OverallQual 당연히 품질이 좋을수록 집이 비쌈

OverallCond 5인 경우에는 가격 범위가 전체에 걸쳐 있다는게 이상 나머지는 정상대로 비례관계

YearRemoteAdd 리모델링 날짜를 말하는 것으로써, 당연히 최근일수록 비싸나 생각보다 그리 비례비가 높지 않고 또 아래 박스권에 대부분 몰려 있음



RoofStyle: Type of roof , 그닥 차이가 없음 Hip이 그나마 가격이 좀 높은 정도? 차이가 그리 없음.

       Flat Flat

       Gable Gable

       Gambrel Gabrel (Barn)

       Hip Hip

       Mansard Mansard

       Shed Shed


RoofMatl: Roof material, Wood Shingles이 가격이 쌔고, Gravel & Tar / Wood Shakes 이 그다음 가격대 그리고 Membrane, Metal, Roll의 경우는 집 가격대가 아주 좁게 형성되어있는점이 특이!!


       ClyTile Clay or Tile

       CompShg Standard (Composite) Shingle

       Membran Membrane

       Metal Metal

       Roll Roll

       Tar&Grv Gravel & Tar

       WdShake Wood Shakes

       WdShngl Wood Shingles

Exterior1st: Exterior covering on house , 집 외부 마감재가 뭐에 따라 다르다. PreCast, Vinyl Siding 같은 경우는 비싼편 


       AsbShng Asbestos Shingles

       AsphShn Asphalt Shingles

       BrkComm Brick Common

       BrkFace Brick Face

       CBlock Cinder Block

       CemntBd Cement Board

       HdBoard Hard Board

       ImStucc Imitation Stucco

       MetalSd Metal Siding

       Other Other

       Plywood Plywood

       PreCast PreCast

       Stone Stone

       Stucco Stucco

       VinylSd Vinyl Siding

       Wd Sdng Wood Siding

       WdShing Wood Shingles

Exterior2nd: Exterior covering on house (if more than one material) 가격이 위와 비슷 


       AsbShng Asbestos Shingles

       AsphShn Asphalt Shingles

       BrkComm Brick Common

       BrkFace Brick Face

       CBlock Cinder Block

       CemntBd Cement Board

       HdBoard Hard Board

       ImStucc Imitation Stucco

       MetalSd Metal Siding

       Other Other

       Plywood Plywood

       PreCast PreCast

       Stone Stone

       Stucco Stucco

       VinylSd Vinyl Siding

       Wd Sdng Wood Siding

       WdShing Wood Shingles

MasVnrType: Masonry veneer type  Stone > Brick Face > Brick Common, None


       BrkCmn Brick Common

       BrkFace Brick Face

       CBlock Cinder Block

       None None

       Stone Stone

MasVnrArea: Masonry veneer area in square feet  관계성이 생각보다 너무 없다.ㄷ


ExterQual: Evaluates the quality of the material on the exterior, Excellent가 최고

       Ex Excellent

       Gd Good

       TA Average/Typical

       Fa Fair

       Po Poor

ExterCond: Evaluates the present condition of the material on the exterior, Excellent > Average/Typical 순으로 높다

       Ex Excellent

       Gd Good

       TA Average/Typical

       Fa Fair

       Po Poor

Foundation: Type of foundation ,  Poured Contrete, Stone, Wood가 높다 

       BrkTil Brick & Tile

       CBlock Cinder Block

       PConc Poured Contrete

       Slab Slab

       Stone Stone

       Wood Wood

BsmtQual: Evaluates the height of the basement  높이가 높을수록 퀄리티가 높은가 봄.


       Ex Excellent (100+ inches)

       Gd Good (90-99 inches)

       TA Typical (80-89 inches)

       Fa Fair (70-79 inches)

       Po Poor (<70 inches

       NA No Basement

BsmtCond: Evaluates the general condition of the basement ,  Excellent가 빠져있고 마찬가지!


       Ex Excellent

       Gd Good

       TA Typical - slight dampness allowed

       Fa Fair - dampness or some cracking or settling

       Po Poor - Severe cracking, settling, or wetness

       NA No Basement

BsmtExposure: Refers to walkout or garden level walls ,  walkout은 외부로 연결된 집안의 통로를 말하는 것으로, 이것도 집 가격이 가겨갣가 별도로 형성된다ㅣ


       Gd Good Exposure

       Av Average Exposure (split levels or foyers typically score average or above)

       Mn Mimimum Exposure

       No No Exposure

       NA No Basement

BsmtFinType1: Rating of basement finished area  이것도 마찬가지로 지하실 상태를 나타내는 거 같음. 


       GLQ Good Living Quarters

       ALQ Average Living Quarters

       BLQ Below Average Living Quarters

       Rec Average Rec Room

       LwQ Low Quality

       Unf Unfinshed

       NA No Basement

BsmtFinSF1: Type 1 finished square feet, 비례관계


BsmtFinType2: Rating of basement finished area (if multiple types), 그닥 관계성이 없다능. 


       GLQ Good Living Quarters

       ALQ Average Living Quarters

       BLQ Below Average Living Quarters

       Rec Average Rec Room

       LwQ Low Quality

       Unf Unfinshed

       NA No Basement


BsmtFinSF2: Type 2 finished square feet, 이것도 마찬가지 그리 관계가 없다.


BsmtUnfSF: Unfinished square feet of basement area, 관계 없다.


TotalBsmtSF: Total square feet of basement area, 비례관계


Heating: Type of heating,  이거는 가스가 높은 집값을 보증해준다는거 GasA, GasW가 둘다 상위권

       Floor Floor Furnace

       GasA Gas forced warm air furnace

       GasW Gas hot water or steam heat

       Grav Gravity furnace

       OthW Hot water or steam heat other than gas

       Wall Wall furnace

HeatingQC: Heating quality and condition, 이것 또한 상태가 좋은게 집값 결정이 영향을 미침. 


       Ex Excellent

       Gd Good

       TA Average/Typical

       Fa Fair

       Po Poor

CentralAir: Central air conditioning 중앙냉방이 있으면 가격이 쎄다


       N No

       Y Yes

Electrical: Electrical system  SBrkr > FuseA > FuseF > FuseP > Mix


       SBrkr Standard Circuit Breakers & Romex

       FuseA Fuse Box over 60 AMP and all Romex wiring (Average)

       FuseF 60 AMP Fuse Box and mostly Romex wiring (Fair)

       FuseP 60 AMP Fuse Box and mostly knob & tube wiring (poor)

       Mix Mixed

1stFlrSF: First Floor square feet , 비례관계

 

2ndFlrSF: Second floor square feet 2층이 없는거 제외하고 비례관계


LowQualFinSF: Low quality finished square feet (all floors) , 영향 없음


GrLivArea: Above grade (ground) living area square feet  비례관계 


BsmtFullBath: Basement full bathrooms, 개수가 증가할수록 가격 범위 시작가격이 조금 올라가나 영향은 없다고 볼 수 있음


BsmtHalfBath: Basement half bathrooms, 개수가 증가할수록 가격 범위 시작가격이 조금 올라가나 영향은 없다고 볼 수 있음


FullBath: Full bathrooms above grade, 개수가 증가할수록 가격 범위 시작가격이 조금 올라가나 영향은 없다고 볼 수 있음


HalfBath: Half baths above grade, 개수가 증가할수록 가격 범위 시작가격이 조금 올라가나 영향은 없다고 볼 수 있음


Bedroom: Bedrooms above grade (does NOT include basement bedrooms) ??


Kitchen: Kitchens above grade ??


KitchenQual: Kitchen quality, 마찬가지 비례


       Ex Excellent

       Gd Good

       TA Typical/Average

       Fa Fair

       Po Poor

       

TotRmsAbvGrd: Total rooms above grade (does not include bathrooms)  살짝 비례관계???! 


Functional: Home functionality (Assume typical unless deductions are warranted)


       Typ Typical Functionality

       Min1 Minor Deductions 1

       Min2 Minor Deductions 2

       Mod Moderate Deductions

       Maj1 Major Deductions 1

       Maj2 Major Deductions 2

       Sev Severely Damaged

       Sal Salvage only

Fireplaces: Number of fireplaces


FireplaceQu: Fireplace quality, 이것도 비례관계


       Ex Excellent - Exceptional Masonry Fireplace

       Gd Good - Masonry Fireplace in main level

       TA Average - Prefabricated Fireplace in main living area or Masonry Fireplace in basement

       Fa Fair - Prefabricated Fireplace in basement

       Po Poor - Ben Franklin Stove

       NA No Fireplace

GarageType: Garage location, BuiltIn, Attchd 가 비싸다.

       2Types More than one type of garage

       Attchd Attached to home

       Basment Basement Garage

       BuiltIn Built-In (Garage part of house - typically has room above garage)

       CarPort Car Port

       Detchd Detached from home

       NA No Garage

GarageYrBlt: Year garage was built , 창고가 지어진 년도도 최근게 당연히 비쌈


GarageFinish: Interior finish of the garage, 비례관계  Fin > RFn > Unf


       Fin Finished

       RFn Rough Finished

       Unf Unfinished

       NA No Garage

GarageCars: Size of garage in car capacity, 이것도 비례관계가 구성이 될 듯. 차대수가 많을수록 가격 범위가 점점 올라간다. 


GarageArea: Size of garage in square feet, 800 square feet까지는 맞으나 그뒤로는 비례관계가 깨진다.


GarageQual: Garage quality, 가격에 영향이 없다. Ex = Gd가 같다. 


       Ex Excellent

       Gd Good

       TA Typical/Average

       Fa Fair

       Po Poor

       NA No Garage

GarageCond: Garage condition, 유의하지 않다. 오히려 Excellent가 Good보다 집 가격이 못하다.


       Ex Excellent

       Gd Good

       TA Typical/Average

       Fa Fair

       Po Poor

       NA No Garage

PavedDrive: Paved driveway 포장일수록 가격이 높다. Y > P > N


       Y Paved 

       P Partial Pavement

       N Dirt/Gravel

WoodDeckSF: Wood deck area in square feet , 약간 비례관계, 400 square feet이후는 데이터가 별로 없다.


OpenPorchSF: Open porch area in square feet , 200 square feet 이후에는 데이터가 별로 없다. 


EnclosedPorch: Enclosed porch area in square feet, 유의하지 않다. 


3SsnPorch: Three season porch area in square feet, 데이터가 별로 없다.


ScreenPorch: Screen porch area in square feet, 데이터가 별로 없어 유의한지 판단하기 어렵다.


PoolArea: Pool area in square feet 데이터가 너무 없어 유의한지 판단하기 어렵다.


PoolQC: Pool quality, Excellent같은 경우 확실히 가격대가 높고 Gd가 오히려 Fa보다 가격이 낮아 유의할지 의문

       Ex Excellent

       Gd Good

       TA Average/Typical

       Fa Fair

       NA No Pool

Fence: Fence quality, Good Privacy는 높으나 나머지가 비교하기 어려울듯, GdPrv와 나머지로 분류해서 categorical factor로 만들지 고민

       GdPrv Good Privacy

       MnPrv Minimum Privacy

       GdWo Good Wood

       MnWw Minimum Wood/Wire

       NA No Fence

MiscFeature: Miscellaneous feature not covered in other categories, Tennis Court가 있음 비쌈 , 창고가 하나 더있어도 비쌈.

       Elev Elevator

       Gar2 2nd Garage (if not described in garage section)

       Othr Other

       Shed Shed (over 100 SF)

       TenC Tennis Court

       NA None

MiscVal: $Value of miscellaneous feature, 데이터도 별로 없음, 유의하지 않음


MoSold: Month Sold (MM)   3,4,7이 더 높은 판매가격을 자랑함.


YrSold: Year Sold (YYYY) 유의하지 않으며 매년 비슷한 모습


SaleType: Type of sale, New와  Con이 시세가 비싸 보이며, 나머지는 비슷

       WD Warranty Deed - Conventional

       CWD Warranty Deed - Cash

       VWD Warranty Deed - VA Loan

       New Home just constructed and sold

       COD Court Officer Deed/Estate

       Con Contract 15% Down payment regular terms

       ConLw Contract Low Down payment and low interest

       ConLI Contract Low Interest

       ConLD Contract Low Down

       Oth Other

SaleCondition: Condition of sale, Partical이 가격대가 높아 보인다.


       Normal Normal Sale

       Abnorml Abnormal Sale -  trade, foreclosure, short sale

       AdjLand Adjoining Land Purchase

       Alloca Allocation - two linked properties with separate deeds, typically condo with a garage unit

       Family Sale between family members

       Partial Home was not completed when last assessed (associated with New Homes)



실제로 이건 description에 있는 정보와 SalesPrice를 보고 연관성을 같이 살펴본 결과를 적은 것이고 이제는 실제로 데이터 전처리를 다음 시간에 하도록 하겠습니다. 


'데이터분석' 카테고리의 다른 글

킥오프용 문서입니다  (0) 2017.04.24
Kaggler's Day #8  (0) 2016.06.10
Kaggler's Day #7  (0) 2016.06.08
Kaggler's Day #6  (0) 2016.05.31
Kaggler's Day #5  (0) 2016.05.27
Posted by 억사마
IT/후기2016. 8. 16. 15:09

Pycon 2016 정리


작년에 일정에 쫓겨 못갔지만 이번 파이선은 아주 천재일우의 기회로 다녀오게 됨. 그것도 3일간 풀로 말이다. 물론 기대가 너무 커서 실망도 크지만 얻은것도 많았다. 대부분 ML 주제가 거의 차지한 거같았다. 다른 세션은 많이 비우는 경우도 생기고. 데이터 분석이 대세인가 싶다. 마지막 날은 튜토리얼 하는 날인데 가서 실제로 Django가지고 간단한 웹서비스도 만들었고 이를 cloud에 배포까지 해보는 실습을 해보면서 장고걸스 / django를 알아보는 좋은 기회도 있었다. 


아래는 내가 우선 놓친(다른 것을 듣느라) 세션들이다. 나중에 유투브가 올라오면 영상까지 볼 만한 것들이다.

뉴스를 재미있게 만드는 방법; 뉴스잼 링크

Django로 쇼핑몰 만들자 링크

Basic Statistics with Python 링크

TOROS: Python Framework for Recommender System 링크

파이썬으로 기초 산수 풀어보기 (이것은 튜토리얼이므로 나중에 업데이트할 예정)

Python으로 IoT, 인지(Cognitive), 머신러닝 삼종세트 활용하기 링크

Django vs Flask, 까봅시다! 링크

검색 로그 시스템 with Python 링크

Decision making with Genetic Algorithms using DEAP 링크

파이썬 데이터 분석 3종 세트 - statsmodels, scikit-learn, theano 링크  


나중에 들은것은 다시 강의 보고 한번 내용 요약해서 올릴 예정.


'IT > 후기' 카테고리의 다른 글

Polyglot Programming  (0) 2015.03.13
2013 JCO 후기  (0) 2013.02.23
Posted by 억사마
데이터분석/R & Python2016. 8. 11. 18:03

파이선 컨을 앞두고 파이선 재미난 코드 snippet 을 보다가 하나 따라해봄. (출처)

주피터에 있는걸 복붙. 사전에 webkit2png  설치가 필요하며 그리고 실행하는 경로에 images라는 폴더 생성을 해야한다.



import requests # http 
import bs4  # beautiful soup
import re # reqular expression
import subprocess # capture screen
import json  #json util
import os # os util 사용하기 위
In [39]:
# Requests
BASE_URL_SDS = "http://search.daum.net/search?nil_suggest=btn&w=news&DA=SBC&cluster=y&q=%EC%82%BC%EC%84%B1sds"
data = requests.get(BASE_URL_SDS)

# row개수 확인
data = bs4.BeautifulSoup(data.text)
# 아래는 reqular expression을 이용하여 totalCount를 가져오는 예제
match = re.search("totalCount: [0-9]+", data.text)
# total Count를 가져오는 부분이며 두번째 인덱스에 숫자가들어있것지
total_count = int(match.group(0).split("totalCount: ")[1])
/Users/jouk/Workspace/python/test/images
In [50]:
# 총 페이지 개수 (페이지당 10개)
pages = total_count / 10 + 1
article_data = [] #아티클 보관할 배열 생성

# 오호라 이 문법은 정말 신기하구먼 자바랑 좀 다른건가 for in 하고 비슷하긴한데 range라는게 있구먼..
for page in range(1, pages+1):
    TARGET_URL = BASE_URL_SDS + "&p=" + str(page)
    data = requests.get(TARGET_URL)
    data = bs4.BeautifulSoup(data.text)
    articles = data.findAll("div", attrs={'class': 'cont_inner'})

    for article in articles:
        title_and_link = article.findAll("a")[0]
        title = title_and_link.text.encode('utf-8')
        link = title_and_link["href"]

        date_and_media = str(article.findAll("span", attrs={'class': 'date'})[0])
        date = date_and_media.split("\n")[1]
        media = date_and_media.split("\n")[2].split("</span> ")[1]

        article_data.append(
            {
                "title": title,
                "link": link,
                "date": date,
                "media": media,
            }
        )
        
        # 아래를 실행하기 위해서는 http://www.paulhammond.org/webkit2png/ 에서 우선 webkit2png가 필요!!
        # ScreenShot
        subprocess.call([
            "webkit2png",
            "-F",   # only create fullsize screenshot
            "--filename=temporary",
            "--dir=" + os.path.join(os.getcwd(), "images"),
            link
        ])
        # Rename Screenshot
        # webkit2png --filename=FILENAME 옵션을 사용하면 한글깨짐 문제 발생
        for filename in os.listdir("./images/"):
            if filename.startswith("temporary"):
                os.rename(
                    os.path.join(os.getcwd(), "images", filename),
                    os.path.join(os.getcwd(), "images",
                                "Screenshot_" + date + "_" + media + "_" + title.replace(" ", "_") + ".png")
                )

# Result as JSON
# 단, ensure_ascii 옵션으로 UTF-8 ( 한글로 보이도록 ) 출력한다.
with open('result.json', 'w') as outfile:
    json.dump(article_data, outfile, ensure_ascii=False)        





Posted by 억사마
데이터분석2016. 6. 10. 12:07

7일차에 올린 내용에 이어서 올릴려고 하니 Tistory에서 에러를 뱉어서 별도로 빼서 올립니다. ㅜ.ㅜ




Update


네 업데이트입니다. 마저 끝내겠습니다. 


경쟁업체가 오픈하면 어떤일이 벌어질까요? 이 효과를 평과하기 위해 우리는 가게중 처음 CompetitorDistance 의 값이 NA로 되어 있다가 후에 의미있는값으로 채워지는 것을 가져옵니다.

특정 날짜가 아닌 경쟁업체의 개업 달만 알려져있다고 합니다. 그래서 우리는 효과를 보기 위해 꽤 큰 window 하다고 합니다.(100일) 

위에 볼드체로 원문에도 적혀있는데 무슨말인지 함 보죠. 147개의 가게가 이용가능한 기간동안 그들의 영역에 옮겨왔다고 합니다. 이 경쟁은 기간을 어떻게 잡느냐에 따라 달라지는 판매량에서 움픅 들어간 모습을 보여준답니다. 그래서 우리는 아래 plot에 기초한 통계에 대해서 aruge를 하지 말자고 합니다. 여튼 보는것은 유익하니까요.

# Sales before and after competition opens
train_store$DateYearmon <- as.yearmon(train_store$Date) # 소스가 길어 주석을 달자면 월로 truncate
train_store <- train_store[order(Date)] #  R을 보면서 항상 이런게 대박인것 같습니다. vectorize연산이 이리 쉽게 되죠. Date순으로 order줍니다.
timespan <- 100 # Days to collect before and after Opening of competition 

그리고  바로 함수를 만듭니다. 실제로 이 함수를 만들어서 list에 verctorize연산을 할려고 합니다. 인자로 받은 가게와 일치하는 가게들만 뽑아서 아까 truncate한 DateYerMon하고 경쟁업체 개업월을 비교하죠 그게 daysWithComp에 담기고  TTTT가다가 FFFF 로 되겠죠. 그리고 그 사이에 경쟁업체 개장월이  경계에 있을테고.  그럼 여기에서 FFF가 있어야만 해당 가게가 운영하다가 경쟁업체가 없다가 생긴걸로 판단이 되겠죠? 당근??! 그래서 any()를 써서  있다면 comOpening(경쟁업체 오픈되는 시점의  인덱스)를 구하고 그리고 timespan즉 100일이 전후로 있다고 하면  그 부분만 잘라서 리턴을 하는거죠 comOpening 시점으로 앞뒤 100일치의 데이터를 말이죠!! 그래서 코드는 다음과 같네요.

beforeAndAfterComp <- function(s) {
    x <- train_store[Store == s]
    daysWithComp <- x$CompetitionOpenSince >= x$DateYearmon
    if (any(!daysWithComp)) {
        compOpening <- head(which(!daysWithComp), 1) - 1
        if (compOpening > timespan & compOpening < (nrow(x) - timespan)) {
           x <- x[(compOpening - timespan):(compOpening + timespan), ] 
            x$Day <- 1:nrow(x)
            return(x)
        }
    }
}

자 이제 r 함수를 만들었죠. 전에도 언급했으나 모르겠으나 여튼 여기 함수를 만든건 처음인듯 . 뭐 자바스크립트랑 별반 다르지 않네요. 벡터연산이 있다는 거 말고는

그리고 뭘해야할까요? 네 이 함수를 전체 데이터에 적용해서 가게별로 뽑아서 list를 만들어볼까합니다.   바로 unique()를 써서 store를 unique하게 뽑고 바로 우리가 위에 만든 함수를 돌려서 temp라는걸 만듭니다요.  그리고 이걸 row로 붙여줍니다. 뭐시냐.. do.call은 앞의 인자가함수고 그다음 인자가 함수에 들어갈 파라메터라고 보시면 됩니다. temp가 storeId별 list로 되어있는걸  하나의 list로 만들어주고  그 row가 147개 정도의 데이터가 되는걸 볼수 있습니다.

temp <- lapply(unique(train_store[!is.na(CompetitionOpenSince)]$Store), beforeAndAfterComp)
temp <- do.call(rbind, temp)
# 147 stores first had no competition but at least 100 days before the end
# of the data set
length(unique(temp$Store))
## [1] 147

자 한번 만든걸 뿌려보죠!


ggplot(temp[Sales != 0], aes(x = Day, y = Sales)) + 
    geom_smooth() + 
    ggtitle(paste("Competition opening around day", timespan))
## geom_smooth: method="auto" and size of largest group is >=1000, so using gam with formula: y ~ s(x, bs = "cs"). Use 'method = x' to change the smoothing method.


확실히 전후로 매출에 변화가 급감하였다가  다시 회복하는 기조를 보이네요..


그리고 마지막입니다. 드디어.. 후화 vote를 제일 많이 받은 녀석이기도 해서 그런지 길이도 어마어마하네요. 제가 본 exploratory analysis 중에 가장 length가 깁니다...

여튼 끝낼게요. 다른 plot을 가져옵니다. Seaonal plot(spsrini)이라고 합 대신에 missing value나 closed store 대신하여 더 값을 잘표현할수 있는 평균값으로 보여주는 plot이라고 합니다.

판매량 평균값으로 계절 추이를 볼수 있는거 같습니다. 

temp <- train
temp$year <- format(temp$Date, "%Y")
temp$month <- format(temp$Date, "%m")
temp[, StoreMean := mean(Sales), by = Store]
temp <- temp[, .(MonthlySalesMean = mean(Sales / (StoreMean)) * 100), 
             by = .(year, month)]
temp <- as.data.frame(temp)
SalesTS <- ts(temp$MonthlySalesMean, start=2013, frequency=12)
col = rainbow(3)
seasonplot(SalesTS, col=col, year.labels.left = TRUE, pch=19, las=1)



결론


우선 몇차례 올리진 않았지만 본 script중에 가장 잘 정리가 된 kaggle script인것 같습니다. 저도 인사이트도 얻고 지금 계획 중인 아이디어 하나에 실제 접목도 하고 싶은 생각이 드네요. 그럼 토요일이나 일요일쯤.. 뭐 Google calendar의 setting된 goal이 알려주는데로 또 글을 올리겠지만 여튼 수고하세요!!










'데이터분석' 카테고리의 다른 글

킥오프용 문서입니다  (0) 2017.04.24
Kaggler's Day #9  (0) 2017.01.12
Kaggler's Day #7  (0) 2016.06.08
Kaggler's Day #6  (0) 2016.05.31
Kaggler's Day #5  (0) 2016.05.27
Posted by 억사마