<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Twitter 데이터를 JMP 데이터 테이블로 스트리밍
영상만 원하시면 끝까지 스크롤하세요.
저는 Mac과 Win, JMP 11과 12에서 이 JSL에 대해 최소한의 테스트를 수행했습니다.이 동영상에서는 향후 JMP 버전의 기능을 활용하지만 그렇다고 해서 중단해서는 안 됩니다.귀하의 경험에 대한 의견을 여기에 추가하십시오.JSL은 첨부된 ZIP 파일에 있습니다.
이 게시물은 여러 가지 주제를 가볍게 다룹니다.
- 트위터 계정
- 스트리밍 데이터
- 비트 조작
- JSON
- OAuth 승인, 서명
- 곱슬 곱슬하다
- 지도 좌표
개요: JSL의 압축을 디렉터리에 푼다.Twitter 앱을 만들고 키를 JSL 파일에 복사합니다.(Windows) cURL의 복사본을 가져와 MAIN.jsl에 경로를 입력합니다.MAIN.jsl 파일을 실행합니다.
시작하다
Twitter 계정이 필요하며 시작하기 전에 Twitter 이용 약관을 읽고 이해해야 합니다.(스트림에서 수집한 데이터는 귀하의 것이 아니며 사용 방법에 제한이 있습니다.무엇이 괜찮은지 아닌지에 대한 조언은 제공하지 않습니다.)
트위터 계정을 사용하여 https://apps.twitter.com/ 새 응용 프로그램을 만들 수 있습니다.이것은 휴대폰과 같은 앱이 아닙니다.프로그램이 Twitter 스트림에 액세스할 수 있게 해주는 키 세트입니다.해당 프로그램은 휴대폰의 앱일 수도 있고, JSL 또는 다음과 같은 Python 프로그램일 수도 있습니다. http://www.tweepy.org/ 제공합니다.(저는 tweepy로 시작해서 JSL의 길을 따라갔습니다.Tweepy 또는 다른 Python 기반 솔루션이 이 JSL 솔루션보다 나을 수 있습니다.)
새로 만들기를 클릭하여 새 애플리케이션을 만들고, 다른 사람이 사용하지 않은 이름을 만들고, 설명을 추가하고, 웹 사이트 이름을 입력하고 콜백 URL을 비워 두세요.웹 사이트 이름을 제공해야 하지만 제안된 대로 자리 표시자를 사용할 수 있습니다.계약서를 읽은 후 트위터 애플리케이션 만들기를 클릭하세요.

탭이 있는 화면에 도착했습니다. 세 번째 탭인 키 및 액세스 토큰이 원하는 탭입니다.

상단에는 필요한 부분인 소비자 키와 소비자 비밀이 있습니다.소비자 키와 비밀번호가 필요합니다.JMP 프로젝트를 시작해 보세요. 파일이 여러 개 있으므로 디렉터리를 만들고 JSL 파일의 압축을 푼 다음 EncryptedKeys.JSL을 편집하고 채우기를 시작합니다.
// apps.twitter.com 사용 새 응용 프로그램을 만들 수 있습니다.여기에 키를 복사하세요.
소비자키 = "Pnb…LAZ";
ConsumerSecret = "AF4C………………qNvXp";
마지막 두 값을 얻으려면 하단에 있는 내 액세스 토큰 만들기 버튼을 클릭하세요.

복사하세요...액세스 토큰은 모두 하이픈이 포함된 한 줄에 있습니다...
accessToken = "3………………-------------오전";
accessTokenSecret = "rc…………………HJ";
EncryptedKeys.JSL에는 주석을 포함하여 5줄이 있습니다.다른 파일에 포함됩니다. EncryptedKeys.JSL을 저장하는 컴퓨터의 보안은 고려해야 할 사항입니다.키 중 두 개는 공개로 간주되지만 두 개는 본인만 알아야 하는 비밀입니다.공개 키는 다른 누구도 필요하지 않으므로 모두 한 곳에 머물 수 있습니다.
방문하다 https://apps.twitter.com/ 앱이 존재하는지 확인한 후 트위터에서 로그아웃하세요.
트위터 스트리밍
트위터는 서비스를 사용하는 다른 방법을 제공합니다 https://dev.twitter.com/ 특정 트윗을 검색하고 새 트윗을 생성할 수 있는 반면 스트리밍은 필터를 사용하여 실시간 트윗을 수집하는 것입니다.트위터에서 적용할 수 있는 필터는 해당 컴퓨터에 효율적으로 설계되었으며 귀하가 원하는 대로 정확하게 작동하지 않을 수도 있습니다(귀하가 지불하는 금액을 기억하세요).가장 흥미로운 쿼리는 키워드와 지리적 영역에 대한 것입니다. 결과는 모든 검색어의 합집합(교차점이 아님)이 됩니다.예제 비디오에서는 지리적 경계 상자 없이 '아침', '점심', '저녁'을 사용했습니다.전 세계적으로 초당 약 3개의 트윗을 검색했습니다.런던 주변의 경계 상자를 사용하여 검색 범위를 런던으로 좁힐 수는 없습니다. 그러면 런던의 모든 트윗과 전 세계의 아침, 점심, 저녁 식사를 반환하려고 합니다.트위터가 얼마나 많은 데이터를 스트리밍할지 아직 확실하지 않습니다. 어느 시점에서는 트위터가 속도를 늦출 것이라고 생각했고, 다른 시점에서는 데이터를 충분히 빠르게 처리할 수 없으면 트위터가 스트리밍을 중단할 것이라고 생각했습니다.어쩌면 둘 다 사실일 수도 있다.이전 실험에서는 "Raleigh"를 선택하고 노스캐롤라이나주 Raleigh 주위에 경계 상자를 배치했습니다.저는 전 세계에서 도난당한 Raleigh 자전거에 대한 트윗을 받았습니다.
주의
캡처 후 필터링을 직접 수행해야 하며, 마음에 들지 않는 단어 목록을 직접 작성하고 싶을 수도 있습니다.검열되지 않은 트윗 목록을 공개적으로 공개하면 당황스럽거나 더 나쁘게 됩니다.또한 트위터에는 데이터를 표시하는 방법에 대한 규칙이 있다는 것을 기억하세요.
지리적 선택
이 JSL 조각은 검색어와 지리적 위치를 선택합니다.코드가 복잡해지기 때문에 네임스페이스를 사용하기 시작했습니다.
include(“PICK.jsl”);
PICK:trackParm = "점심,저녁,아침"; // 기본 쿼리
선택:선택(); // 쿼리를 조정하는 GUI

직사각형 추가 버튼은 두 개의 직사각형을 추가했습니다.PICK 네임스페이스의 값은 나중에 트위터 쿼리를 작성하는 데 사용됩니다."and" 기능이 적습니다. 점심을 먹다, 저녁을 먹다, 아침을 먹다라는 단어를 사용하여 "먹다"와 식사를 모두 포함하는 트윗을 선택할 수 있습니다.그러나 대부분의 모든 것이 ORed(union)입니다.
더 포함
include("JSON.jsl"); // 트윗을 구문 분석하기 위한 Xan JSON 라이브러리의 하위 집합
include("BITS.jsl"); // 비트 조작을 위한 코드
include("AUTH.jsl"); // oauth 코드
include("SIGN.jsl"); // 서명 코드
include("PARM.jsl"); // 컬에 대한 http parm을 구축하기 위한 코드
여기에는 JSL을 로드하고 몇 가지 간단한 온전성 검사와 자체 테스트가 포함됩니다.BITS는 나중에 더 빠른 코드를 만들기 위해 일부 데이터 구조를 초기화하는 데 1분 정도 걸립니다. +++가 로그 창에 인쇄하는 동안 잠시 기다려 주세요.JSON은 다음에서 가져옵니다. Xan이 이전에 했던 일 ; Twitter 스트림은 JSON 형식으로 전송됩니다.AUTH 및 SIGN에는 EncryptedKeys를 사용하여 Twitter에 인증("로그온")하는 JSL이 포함되어 있습니다.이는 복잡하며 컴퓨터에 이미 설치된 외부 프로그램을 사용하여 SHA1 해시를 수행합니다.비트 함수를 작성할 때 SHA1 해시를 구현해야 한다고 생각했는데, 그것도 복잡하고 디버깅할 필요가 없는 것을 사용하게 되어 기쁘네요.마지막 포함인 PARM은 cURL에 대한 문자열을 작성합니다.
곱슬 곱슬하다
cURL 사본이 필요합니다.MAC에는 이미 존재합니다.Windows 사용자는 다음에서 얻을 수 있습니다. http://curl.haxx.se/ 먼저 시스템 사람들을 확인한 후.https://en.wikipedia.org/wiki/CURL cURL 질문의 출발점입니다.다운로드했습니다 Win64 x86_64 CAB .(귀하의 컴퓨터는 IA64가 아니라 I386입니다.) Curl.exe를 데스크탑으로 끌어다 놓고 JMP가 이를 찾을 수 있는 위치를 알고 있는지 확인하십시오(RunProgram은 $DESKTOP을 확장하지 않고 전체 답변을 입력합니다!).
cURLlocation="C:\Users\사용자\Desktop\curl.exe";
cURL은 JMP가 RunProgram 함수를 통해 액세스할 수 있는 명령줄 유틸리티입니다.cURL 프로그램은 Twitter에 연결하고 트윗 스트림을 JMP에 다시 공급합니다.
RunProgram(실행 가능( cURLlocation ), 옵션( cURLparms ),
readFunction(함수({this},
buftxt ||= this << 읽기( blob );
프로세스();
If( this << isReadEOF,
쓰기( 오른쪽( Char( buftxt ), 100 ) ) );))
cURLparms 및 process() 함수(위에서 사용됨)만 설명하면 됩니다.
cURLparms는 다음에서 유래합니다. PARM:curlParm( PICK:trackParm, PICK:locationParm ); PICK(위 방법)을 사용하여 추적할 용어와 추적할 위치를 파악합니다.PARM 네임스페이스의 컬Parm 함수는 ConsumerKey...applicationTokenSecret 변수(위 방법)를 사용하여 특정 용어 및 위치에 대한 서명/인증을 수행합니다.
process 함수는 buftxt에서 데이터를 가져와 데이터 테이블에 저장합니다.
달리다
완료!첨부된 파일을 EncryptedKeys.JSL과 동일한 디렉터리에 넣고 main.jsl을 열고 실행합니다.대화 상자가 열립니다. (처음에는 확인을 누르십시오. 지도 지점이 표시되도록 하는 검색을 사용하려면...) 몇 가지 검색어나 작은 위치를 설정하거나 둘 다를 설정하십시오.
JSL이 끝나면 RunProgram이 예기치 않게 중지될 때 다시 시작하는 루프를 볼 수 있습니다.스크립트에 문제가 발생할 경우 Twitter 사이트 남용을 방지하기 위해 60초 동안 지연됩니다.인터넷 연결은 며칠 동안 유지되거나 한 시간에 여러 번 실패할 수 있습니다.트위터가 다양한 이유로 연결을 중단하는 것도 가능합니다.for 루프는 또한 적은 횟수만 다시 시작하도록 제한됩니다.
스크립트는 거의 테스트되지 않았습니다. 작동하지 않는지 물어보세요. 감사합니다!
두 번째 데이터 테이블과 지도는 시작 대화 상자의 기본 아침/점심/저녁 값에 따라 달라집니다.아침/점심/저녁 트윗을 찾는 하드 코딩된 JSL이 있습니다.다시 작업할 수도 있고 완전히 잘라낼 수도 있습니다.
지도 하단에 있는 STOP 버튼을 누르면 (아마도) 스크립트가 정상적으로 중지됩니다.MAC의 JMP가 향후 릴리스에서 정상적으로 중지되지 않도록 할 수 있는 버그를 수정했습니다. JMP 11 또는 12를 강제 종료해야 할 수도 있습니다.
프레젠테이션(데이터 테이블에서 비디오 만들기)
아침/점심/저녁 트윗을 잠시 캡쳐해 보면 영상을 만들기에 충분한 데이터가 있습니다.여러 최근 게시물의 아이디어를 사용하여…더 나은 색상 코딩 표준을 원하면 하루를 시작하는 데 녹색을 사용하고 하루를 멈추는 데 빨간색을 사용하고 점심 시간에는 파란색을 사용합니다.위치 데이터가 있는 행만 유지하려면 행의 하위 집합을 지정합니다.좌표 또는 placeBounding_boxCoordinates의 중심에서 xLon 및 yLat 열을 생성하는 수식을 사용했습니다.

좌표를 사용할 수 없는 경우 수식은 값을 누락으로 설정합니다. 트윗의 약 5%만이 좌표를 가지고 있습니다.
이 열 공식은 트윗을 분류하는 열을 만들었지만 여전히 각 언어마다 다릅니다.

카테고리를 결합하려면 다음 열 공식이 따라옵니다.

비디오 프레임 생성 속도를 높이려면 부분 집합 데이터를 행렬에 로드하십시오.
dt = open("$desktop/sha1/TwitterFeed3.jmp");
xLonVec=dt:xLon<
yLatVec=dt:yLat<
kindVec = dt:kindCode<
timeVec = dt:dateUTC<
close(dt,nosave);
GraphBox를 만들어 프레임을 생성합니다.
새 창( "식사 트윗", // 그래프의 마커 크기는 빨간색/녹색/파란색 트윗 위치에 사용됩니다.
g = 그래프 상자( 프레임 크기( 1920, 900 ), << 배경 지도( 이미지( "세부 지구", 투명도( 1 ) ), 경계( "세계" ) ) , <
);
축을 설정하고 지도를 추가하는 데 더 많은 JSL이 있습니다.대부분의 작업은 데이터 테이블에서 로드된 행렬을 처리하는 다음 그래픽 스크립트에서 수행됩니다.
g[framebox( 1 )] << addGraphicsScript(
투명성(.8);
for(idx=lowIndex,idx<=highIndex,idx++,
마커( 색상 상태( match(kindVec[idx],1,"green",2,"blue",3,"red") ),{xLonVec[idx], yLatVec[idx]} );
)
);
그리고 다른 시작 및 종료 시간으로 지도를 다시 그리고 사진을 캡처하도록 하는 드라이버 코드는 다음과 같습니다.
nframes = 초*30;// 30fps에서 초
시작 = min(timeVec);
end = max(timeVec);
기간 = 끝 - 시작;
델타 = 기간 / nframes;
For( iframe = 0, iframe < nframes, iframe++,
Mindate = 시작 + (iframe - 0) * 델타 - 2*3600; // 2시간 전으로 돌아갑니다.
maxdate = 시작 + (iframe + 1) * 델타 + 3600; // 1시간 앞으로
lowIndex=floor(interpolate(mindate,timeVec,1::nrows(timeVec)));
highIndex=floor(interpolate(maxdate,timeVec,1::nrows(timeVec)));
g<<다시보기;
잠깐( 1 );
g[framebox(1)]<
);
결국에는 비디오 제작을 위한 프레임을 얻게 됩니다.나는 Blender(학습 곡선이 길지만 강력함)를 사용하여 이 5분짜리 비디오를 만들었습니다. 이 비디오에는 미국 추수감사절 연휴를 포함하여 16일 동안 377,765개의 트윗이 있습니다.총 8,187,114개의 트윗이 있었지만 대부분 위도 및 경도 데이터가 포함되지 않았습니다.이 작업을 다시 수행하면 수집된 데이터의 하위 집합을 지정하겠습니다. 2.5GB 전체 테이블은 큽니다.
https://www.youtube.com/watch?v=N20KsrmdgOU 최대화!
첨부 파일이 없나요? 여기를 클릭하세요 게시물을 보려면.