[PredictionIO]install Jupyter

我想有在玩資料分析的朋友對於jupyter一定不陌生,它是一款open source的網頁版Machine Learning Analytics tools,

透過這套工具,你可以快速又方便進行資料分析、跑跑演算法,實作視覺化,而他也是iPython的前身,

至於切分出該專案,主要是因為iPython想更專注在shell的核心開發(shell真的很強大),

所以把其他元件都往Jupyter 專案集中,但我想我應該會喜歡web介面。

Jupyter是一個介於IDE和Editor的工具,我們可以用它來寫直譯語言,同時很容易做到資料視覺化,

並且可以輸出成HTML5崁入到任何網頁上,也可顯示多媒體資源(圖片、影片和LaTeX)和執行javascript,

或是用notebook格式分享並討論,很多資料分析、Machine Learning的平台上的討論,

大部分都是以Jupyter notebook的格式出現,且支援多種主流直譯語言,

Python,R,Julia、Scala....等超過40種語言,安裝上也相當簡單方便。

python3 -m pip install --upgrade pip
python3 -m pip install jupyter

你可透過以下命令設定password

jupyter notebook --generate-config
jupyter notebook password

但我都在本機,所以直接jupyter notebook --ip=0.0.0.0 --port=8888 --allow-root

開啟127.0.0.1:8888 並輸入token登入

我們先來換一下黑底,寫程式我想大家都會愛黑底主題,

可以先去jupyter-themes逛逛(記得pip install --upgrade notebook)。

pip3 install --upgrade jupyterthemes
jt -t oceans16 -fs 95 -altp -tfs 12 -nfs 115 -cellw 88% -T

ps:記得重新啟動

 

匯出之前的電影資料

pio export --appid 1 --output /tmp/movies --format parquet

 

New 一個python3

輸入以下python,建立一個events的temp table(記得先pip install pyspark、pip install pandas)

import pyspark
import pandas as pd
import matplotlib.pyplot as plt
def rows_to_df(rows):
    return pd.DataFrame(map(lambda e: e.asDict(), rows))
from pyspark import SparkConf, SparkContext
from pyspark.sql import SQLContext
conf = (SparkConf()
         .setMaster("local")
         .setAppName("Myapp1")
         .set("spark.executor.memory", "1g"))
sc = SparkContext(conf = conf)
sqlc = SQLContext(sc)
rdd = sqlc.read.parquet("/tmp/movies/part-00000-a47313ce-cf59-4462-81e7-4d7a2e171af8.snappy.parquet")
rdd.registerTempTable("events")

我常用的快捷鍵​

Shift + tab:看函式的說明

Esc+h:列出所有快捷鍵

Esc + d,d:刪除目前cell

 

接下來透過spark sql進行資料分析並輸出結果(spark sql讓我太有親切感了~XD)

summary = sqlc.sql("SELECT "
                   "entityType, event, targetEntityType, COUNT(*) AS c "
                   "FROM events "
                   "GROUP BY entityType, event, targetEntityType").collect()
df = pd.DataFrame(list(summary), columns = ['entityType', 'event','targetEntityType','c'] )
print (df)

視覺化的第一步都是圓餅圖

count = list(map(lambda e: e.c, summary))
event = list(map(lambda e: "%s (%d)" % (e.event, e.c), summary))
colors = ['gold', 'lightskyblue']
plt.pie(count, labels=event, colors=colors, startangle=90, autopct="%1.1f%%")
plt.axis('equal')
plt.show()

接下來,我們繼續分析rating的分佈情況

ratings = sqlc.sql("SELECT properties.rating AS r, COUNT(*) AS c "
                   "FROM events "
                   "WHERE properties.rating IS NOT NULL "
                   "GROUP BY properties.rating "
                   "ORDER BY r").collect()
count = list(map(lambda e: e.c, ratings))
rating =list(map(lambda e: "%s (%d)" % (e.r, e.c), ratings))
colors = ['yellowgreen', 'plum', 'gold', 'lightskyblue', 'lightcoral']
plt.pie(count, labels=rating, colors=colors, startangle=90,
        autopct="%1.1f%%")
plt.axis('equal')
plt.show()

人客~~這樣有沒有很簡單,另外,直譯式語言真的好懂又簡單上手

 

參考

jupyter

IPython

Machine Learning Analytics with IPython Notebook

Using Analytics Tools

jupyter-themes

https://nbviewer.jupyter.org/