Skip to content

Instantly share code, notes, and snippets.

@regonn
Created May 11, 2018 09:36
Show Gist options
  • Select an option

  • Save regonn/3f261402f7fdc4ee110b4facb71c294b to your computer and use it in GitHub Desktop.

Select an option

Save regonn/3f261402f7fdc4ee110b4facb71c294b to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n",
"Install the spreadsheet gem version ~>1.1.1 for using spreadsheet functions.\n",
"\n",
"Install the mechanize gem version ~>2.7.5 for using mechanize functions.\n"
]
},
{
"data": {
"text/plain": [
"true"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"require 'google/cloud/bigquery' # google-cloud-bigquery gem\n",
"require 'daru' # データフレーム\n",
"require 'rbplotly' # いい感じにプロットしてくれるグラフ描画ライブラリ"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"#<Google::Cloud::Bigquery::Project:0x0000559c61223870 @service=Google::Cloud::Bigquery::Service(gcpug-203613)>"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 先程データを登録したProjectと参照権限を持つユーザをIAMで作りkeyfileを取得\n",
"bigquery = Google::Cloud::Bigquery.new(project: \"gcpug-203613\", keyfile: \"./gcpug-2cc329f2b739.json\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"#<Google::Cloud::Bigquery::Dataset:0x0000559c61112440 @service=Google::Cloud::Bigquery::Service(gcpug-203613), @gapi=#<Google::Apis::BigqueryV2::Dataset:0x0000559c6114bd58 @access=[#<Google::Apis::BigqueryV2::Dataset::Access:0x0000559c6114a6d8 @role=\"WRITER\", @special_group=\"projectWriters\">, #<Google::Apis::BigqueryV2::Dataset::Access:0x0000559c61148ce8 @role=\"OWNER\", @special_group=\"projectOwners\">, #<Google::Apis::BigqueryV2::Dataset::Access:0x0000559c61147be0 @role=\"OWNER\", @user_by_email=\"regonn@sonicgarden.jp\">, #<Google::Apis::BigqueryV2::Dataset::Access:0x0000559c61146b28 @role=\"READER\", @special_group=\"projectReaders\">], @creation_time=1525875347728, @dataset_reference=#<Google::Apis::BigqueryV2::DatasetReference:0x0000559c61145368 @dataset_id=\"titanic\", @project_id=\"gcpug-203613\">, @etag=\"az+U7xXw1byypxtjLXsZDg==\", @id=\"gcpug-203613:titanic\", @kind=\"bigquery#dataset\", @last_modified_time=1525875347728, @location=\"asia-northeast1\", @self_link=\"https://www.googleapis.com/bigquery/v2/projects/gcpug-203613/datasets/titanic\">, @reference=nil>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"titanic = bigquery.dataset(\"titanic\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\"SELECT PassengerId, Survived, Pclass, Name, Sex, Age\\nFROM passengers\\nORDER BY PassengerId\\nLIMIT 100\\n\""
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sql = <<-EOS\n",
"SELECT PassengerId, Survived, Pclass, Name, Sex, Age\n",
"FROM passengers\n",
"ORDER BY PassengerId\n",
"LIMIT 100\n",
"EOS"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"job = titanic.query_job sql\n",
"job.wait_until_done!\n",
"data = job.data if !job.failed?"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<b> Daru::DataFrame(0x6) </b>\n",
"<table>\n",
" <thead>\n",
" \n",
" <tr>\n",
" <th></th>\n",
" \n",
" <th>PassengerId</th>\n",
" \n",
" <th>Survived</th>\n",
" \n",
" <th>Pclass</th>\n",
" \n",
" <th>Name</th>\n",
" \n",
" <th>Sex</th>\n",
" \n",
" <th>Age</th>\n",
" \n",
" </tr>\n",
" \n",
"</thead>\n",
" <tbody>\n",
" \n",
"\n",
" \n",
"</tbody>\n",
"</table>"
],
"text/plain": [
"#<Daru::DataFrame(0x6)>\n",
" PassengerI Survived Pclass Name Sex Age"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = Daru::DataFrame.new(\n",
" {\n",
" 'PassengerId' => [],\n",
" 'Survived' => [],\n",
" 'Pclass' => [],\n",
" 'Name' => [],\n",
" 'Sex' => [],\n",
" 'Age' => []\n",
" }\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# BigQuery Data から df への良さそうな変換方法がなさそうなので考え中\n",
"data.each do |passenger|\n",
" df.add_row passenger.values\n",
"end\n",
"nil"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<b> Daru::DataFrame(100x6) </b>\n",
"<table>\n",
" <thead>\n",
" \n",
" <tr>\n",
" <th></th>\n",
" \n",
" <th>PassengerId</th>\n",
" \n",
" <th>Survived</th>\n",
" \n",
" <th>Pclass</th>\n",
" \n",
" <th>Name</th>\n",
" \n",
" <th>Sex</th>\n",
" \n",
" <th>Age</th>\n",
" \n",
" </tr>\n",
" \n",
"</thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <td>0</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>0</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>Braund, Mr. Owen Harris</td>\n",
" \n",
" <td>male</td>\n",
" \n",
" <td>22.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>1</td>\n",
" \n",
" <td>2</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>Cumings, Mrs. John Bradley (Florence Briggs Thayer)</td>\n",
" \n",
" <td>female</td>\n",
" \n",
" <td>38.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>2</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>Heikkinen, Miss. Laina</td>\n",
" \n",
" <td>female</td>\n",
" \n",
" <td>26.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>3</td>\n",
" \n",
" <td>4</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
" \n",
" <td>female</td>\n",
" \n",
" <td>35.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>4</td>\n",
" \n",
" <td>5</td>\n",
" \n",
" <td>0</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>Allen, Mr. William Henry</td>\n",
" \n",
" <td>male</td>\n",
" \n",
" <td>35.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>5</td>\n",
" \n",
" <td>6</td>\n",
" \n",
" <td>0</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>Moran, Mr. James</td>\n",
" \n",
" <td>male</td>\n",
" \n",
" <td></td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>6</td>\n",
" \n",
" <td>7</td>\n",
" \n",
" <td>0</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>McCarthy, Mr. Timothy J</td>\n",
" \n",
" <td>male</td>\n",
" \n",
" <td>54.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>7</td>\n",
" \n",
" <td>8</td>\n",
" \n",
" <td>0</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>Palsson, Master. Gosta Leonard</td>\n",
" \n",
" <td>male</td>\n",
" \n",
" <td>2.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>8</td>\n",
" \n",
" <td>9</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)</td>\n",
" \n",
" <td>female</td>\n",
" \n",
" <td>27.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>9</td>\n",
" \n",
" <td>10</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>2</td>\n",
" \n",
" <td>Nasser, Mrs. Nicholas (Adele Achem)</td>\n",
" \n",
" <td>female</td>\n",
" \n",
" <td>14.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>10</td>\n",
" \n",
" <td>11</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>Sandstrom, Miss. Marguerite Rut</td>\n",
" \n",
" <td>female</td>\n",
" \n",
" <td>4.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>11</td>\n",
" \n",
" <td>12</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>Bonnell, Miss. Elizabeth</td>\n",
" \n",
" <td>female</td>\n",
" \n",
" <td>58.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>12</td>\n",
" \n",
" <td>13</td>\n",
" \n",
" <td>0</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>Saundercock, Mr. William Henry</td>\n",
" \n",
" <td>male</td>\n",
" \n",
" <td>20.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>13</td>\n",
" \n",
" <td>14</td>\n",
" \n",
" <td>0</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>Andersson, Mr. Anders Johan</td>\n",
" \n",
" <td>male</td>\n",
" \n",
" <td>39.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>14</td>\n",
" \n",
" <td>15</td>\n",
" \n",
" <td>0</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>Vestrom, Miss. Hulda Amanda Adolfina</td>\n",
" \n",
" <td>female</td>\n",
" \n",
" <td>14.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>15</td>\n",
" \n",
" <td>16</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>2</td>\n",
" \n",
" <td>Hewlett, Mrs. (Mary D Kingcome) </td>\n",
" \n",
" <td>female</td>\n",
" \n",
" <td>55.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>16</td>\n",
" \n",
" <td>17</td>\n",
" \n",
" <td>0</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>Rice, Master. Eugene</td>\n",
" \n",
" <td>male</td>\n",
" \n",
" <td>2.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>17</td>\n",
" \n",
" <td>18</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>2</td>\n",
" \n",
" <td>Williams, Mr. Charles Eugene</td>\n",
" \n",
" <td>male</td>\n",
" \n",
" <td></td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>18</td>\n",
" \n",
" <td>19</td>\n",
" \n",
" <td>0</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>Vander Planke, Mrs. Julius (Emelia Maria Vandemoortele)</td>\n",
" \n",
" <td>female</td>\n",
" \n",
" <td>31.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>19</td>\n",
" \n",
" <td>20</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>Masselmani, Mrs. Fatima</td>\n",
" \n",
" <td>female</td>\n",
" \n",
" <td></td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>20</td>\n",
" \n",
" <td>21</td>\n",
" \n",
" <td>0</td>\n",
" \n",
" <td>2</td>\n",
" \n",
" <td>Fynney, Mr. Joseph J</td>\n",
" \n",
" <td>male</td>\n",
" \n",
" <td>35.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>21</td>\n",
" \n",
" <td>22</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>2</td>\n",
" \n",
" <td>Beesley, Mr. Lawrence</td>\n",
" \n",
" <td>male</td>\n",
" \n",
" <td>34.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>22</td>\n",
" \n",
" <td>23</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>McGowan, Miss. Anna \"Annie\"</td>\n",
" \n",
" <td>female</td>\n",
" \n",
" <td>15.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>23</td>\n",
" \n",
" <td>24</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>Sloper, Mr. William Thompson</td>\n",
" \n",
" <td>male</td>\n",
" \n",
" <td>28.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>24</td>\n",
" \n",
" <td>25</td>\n",
" \n",
" <td>0</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>Palsson, Miss. Torborg Danira</td>\n",
" \n",
" <td>female</td>\n",
" \n",
" <td>8.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>25</td>\n",
" \n",
" <td>26</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>Asplund, Mrs. Carl Oscar (Selma Augusta Emilia Johansson)</td>\n",
" \n",
" <td>female</td>\n",
" \n",
" <td>38.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>26</td>\n",
" \n",
" <td>27</td>\n",
" \n",
" <td>0</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>Emir, Mr. Farred Chehab</td>\n",
" \n",
" <td>male</td>\n",
" \n",
" <td></td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>27</td>\n",
" \n",
" <td>28</td>\n",
" \n",
" <td>0</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>Fortune, Mr. Charles Alexander</td>\n",
" \n",
" <td>male</td>\n",
" \n",
" <td>19.0</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>28</td>\n",
" \n",
" <td>29</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>O'Dwyer, Miss. Ellen \"Nellie\"</td>\n",
" \n",
" <td>female</td>\n",
" \n",
" <td></td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>29</td>\n",
" \n",
" <td>30</td>\n",
" \n",
" <td>0</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>Todoroff, Mr. Lalio</td>\n",
" \n",
" <td>male</td>\n",
" \n",
" <td></td>\n",
" \n",
" </tr>\n",
" \n",
"\n",
" \n",
" <tr>\n",
" \n",
" <td>...</td>\n",
" \n",
" <td>...</td>\n",
" \n",
" <td>...</td>\n",
" \n",
" <td>...</td>\n",
" \n",
" <td>...</td>\n",
" \n",
" <td>...</td>\n",
" \n",
" <td>...</td>\n",
" \n",
" </tr>\n",
"\n",
" \n",
"\n",
" <tr>\n",
" <td>99</td>\n",
" \n",
" <td>100</td>\n",
" \n",
" <td>0</td>\n",
" \n",
" <td>2</td>\n",
" \n",
" <td>Kantor, Mr. Sinai</td>\n",
" \n",
" <td>male</td>\n",
" \n",
" <td>34.0</td>\n",
" \n",
" </tr>\n",
" \n",
"</tbody>\n",
"</table>"
],
"text/plain": [
"#<Daru::DataFrame(100x6)>\n",
" PassengerI Survived Pclass Name Sex Age\n",
" 0 1 0 3 Braund, Mr male 22.0\n",
" 1 2 1 1 Cumings, M female 38.0\n",
" 2 3 1 3 Heikkinen, female 26.0\n",
" 3 4 1 1 Futrelle, female 35.0\n",
" 4 5 0 3 Allen, Mr. male 35.0\n",
" 5 6 0 3 Moran, Mr. male nil\n",
" 6 7 0 1 McCarthy, male 54.0\n",
" 7 8 0 3 Palsson, M male 2.0\n",
" 8 9 1 3 Johnson, M female 27.0\n",
" 9 10 1 2 Nasser, Mr female 14.0\n",
" 10 11 1 3 Sandstrom, female 4.0\n",
" 11 12 1 1 Bonnell, M female 58.0\n",
" 12 13 0 3 Saundercoc male 20.0\n",
" 13 14 0 3 Andersson, male 39.0\n",
" 14 15 0 3 Vestrom, M female 14.0\n",
" ... ... ... ... ... ... ..."
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<b> Daru::DataFrame(5x4) </b>\n",
"<table>\n",
" <thead>\n",
" \n",
" <tr>\n",
" <th></th>\n",
" \n",
" <th>PassengerId</th>\n",
" \n",
" <th>Survived</th>\n",
" \n",
" <th>Pclass</th>\n",
" \n",
" <th>Age</th>\n",
" \n",
" </tr>\n",
" \n",
"</thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <td>count</td>\n",
" \n",
" <td>100</td>\n",
" \n",
" <td>100</td>\n",
" \n",
" <td>100</td>\n",
" \n",
" <td>78</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>mean</td>\n",
" \n",
" <td>50.5</td>\n",
" \n",
" <td>0.41</td>\n",
" \n",
" <td>2.4</td>\n",
" \n",
" <td>27.46576923076923</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>std</td>\n",
" \n",
" <td>29.011491975882016</td>\n",
" \n",
" <td>0.49431107042371025</td>\n",
" \n",
" <td>0.8164965809277257</td>\n",
" \n",
" <td>15.278878343208756</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>min</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>0</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>0.83</td>\n",
" \n",
" </tr>\n",
" \n",
" <tr>\n",
" <td>max</td>\n",
" \n",
" <td>100</td>\n",
" \n",
" <td>1</td>\n",
" \n",
" <td>3</td>\n",
" \n",
" <td>71.0</td>\n",
" \n",
" </tr>\n",
" \n",
"\n",
" \n",
"</tbody>\n",
"</table>"
],
"text/plain": [
"#<Daru::DataFrame(5x4)>\n",
" PassengerI Survived Pclass Age\n",
" count 100 100 100 78\n",
" mean 50.5 0.41 2.4 27.4657692\n",
" std 29.0114919 0.49431107 0.81649658 15.2788783\n",
" min 1 0 1 0.83\n",
" max 100 1 3 71.0"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
":show_histograms"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# rbplotly用にデータ作成\n",
"# ここらへん、まだ Ruby 弱い。\n",
"def show_histograms(dataframe, names, layout: nil)\n",
" layout ||= {}\n",
" raise ArgumentError, \"layout must be a Hash\" unless layout.kind_of? Hash\n",
"\n",
" # each hash in traces specifies the properties of a single chart\n",
" traces = names.map.with_index do |name, i|\n",
" axis_index = i == 0 ? '' : i + 1\n",
" {\n",
" x: dataframe[name].to_a, # specify samples in `x` for histogram\n",
" name: name,\n",
" type: :histogram,\n",
" xaxis: \"x#{axis_index}\",\n",
" yaxis: \"y#{axis_index}\",\n",
" nbinsx: 20\n",
" }\n",
" end\n",
"\n",
" # chart layout calculation\n",
"\n",
" ncol = 2\n",
" nrow = (names.length + 1) / ncol\n",
" grid_width = 1.0 / ncol\n",
" grid_height = 1.0 / nrow\n",
" sep = 0.02\n",
"\n",
" trace_index = 0\n",
" nrow.times do |row|\n",
" ncol.times do |col|\n",
" axis_index = trace_index == 0 ? '' : trace_index + 1\n",
" # build the layout hash for allocating each chat\n",
" layout[:\"xaxis#{axis_index}\"] = {\n",
" domain: [col * grid_width + sep, (col + 1) * grid_width - sep],\n",
" anchor: \"y#{axis_index}\"\n",
" }\n",
" layout[:\"yaxis#{axis_index}\"] = {\n",
" domain: [row * grid_height + sep, (row + 1) * grid_height - sep],\n",
" anchor: \"x#{axis_index}\"\n",
" }\n",
" trace_index += 1\n",
" end\n",
" end\n",
" Plotly::Plot.new(data: traces, layout: layout).show\n",
"end\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
" <script>\n",
" requirejs.config({paths: { 'plotly': ['https://cdn.plot.ly/plotly-latest.min'] }})\n",
" </script>\n",
"\n",
"\n",
"<div id=\"337a92eb-83a6-4c61-b2d4-e893a002d766\" style=\"height: 100%; width: 100%;\"></div>\n",
"\n",
"<script>\n",
" require(['plotly'], function(Plotly) { \n",
"Plotly.newPlot(\n",
" '337a92eb-83a6-4c61-b2d4-e893a002d766',\n",
" [{\"x\":[0,1,1,1,0,0,0,0,1,1,1,1,0,0,0,1,0,1,0,1,0,1,1,1,0,1,0,0,1,0,0,1,1,0,0,0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0],\"name\":\"Survived\",\"type\":\"histogram\",\"xaxis\":\"x\",\"yaxis\":\"y\",\"nbinsx\":20},{\"x\":[3,1,3,1,3,3,1,3,3,2,3,1,3,3,3,2,3,2,3,3,2,2,3,1,3,3,3,1,3,3,1,1,3,2,1,1,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,1,2,1,1,2,3,2,3,3,1,1,3,1,3,2,3,3,3,2,3,2,3,3,3,3,3,2,3,3,3,3,1,2,3,3,3,1,3,3,3,1,3,3,3,1,1,2,2],\"name\":\"Pclass\",\"type\":\"histogram\",\"xaxis\":\"x2\",\"yaxis\":\"y2\",\"nbinsx\":20},{\"x\":[\"male\",\"female\",\"female\",\"female\",\"male\",\"male\",\"male\",\"male\",\"female\",\"female\",\"female\",\"female\",\"male\",\"male\",\"female\",\"female\",\"male\",\"male\",\"female\",\"female\",\"male\",\"male\",\"female\",\"male\",\"female\",\"female\",\"male\",\"male\",\"female\",\"male\",\"male\",\"female\",\"female\",\"male\",\"male\",\"male\",\"male\",\"male\",\"female\",\"female\",\"female\",\"female\",\"male\",\"female\",\"female\",\"male\",\"male\",\"female\",\"male\",\"female\",\"male\",\"male\",\"female\",\"female\",\"male\",\"male\",\"female\",\"male\",\"female\",\"male\",\"male\",\"female\",\"male\",\"male\",\"male\",\"male\",\"female\",\"male\",\"female\",\"male\",\"male\",\"female\",\"male\",\"male\",\"male\",\"male\",\"male\",\"male\",\"male\",\"female\",\"male\",\"male\",\"female\",\"male\",\"female\",\"female\",\"male\",\"male\",\"female\",\"male\",\"male\",\"male\",\"male\",\"male\",\"male\",\"male\",\"male\",\"male\",\"female\",\"male\"],\"name\":\"Sex\",\"type\":\"histogram\",\"xaxis\":\"x3\",\"yaxis\":\"y3\",\"nbinsx\":20},{\"x\":[22.0,38.0,26.0,35.0,35.0,null,54.0,2.0,27.0,14.0,4.0,58.0,20.0,39.0,14.0,55.0,2.0,null,31.0,null,35.0,34.0,15.0,28.0,8.0,38.0,null,19.0,null,null,40.0,null,null,66.0,28.0,42.0,null,21.0,18.0,14.0,40.0,27.0,null,3.0,19.0,null,null,null,null,18.0,7.0,21.0,49.0,29.0,65.0,null,21.0,28.5,5.0,11.0,22.0,38.0,45.0,4.0,null,null,29.0,19.0,17.0,26.0,32.0,16.0,21.0,26.0,32.0,25.0,null,null,0.83,30.0,22.0,29.0,null,28.0,17.0,33.0,16.0,null,23.0,24.0,29.0,20.0,46.0,26.0,59.0,null,71.0,23.0,34.0,34.0],\"name\":\"Age\",\"type\":\"histogram\",\"xaxis\":\"x4\",\"yaxis\":\"y4\",\"nbinsx\":20}],\n",
" {\"height\":700,\"xaxis\":{\"domain\":[0.02,0.48],\"anchor\":\"y\"},\"yaxis\":{\"domain\":[0.02,0.48],\"anchor\":\"x\"},\"xaxis2\":{\"domain\":[0.52,0.98],\"anchor\":\"y2\"},\"yaxis2\":{\"domain\":[0.02,0.48],\"anchor\":\"x2\"},\"xaxis3\":{\"domain\":[0.02,0.48],\"anchor\":\"y3\"},\"yaxis3\":{\"domain\":[0.52,0.98],\"anchor\":\"x3\"},\"xaxis4\":{\"domain\":[0.52,0.98],\"anchor\":\"y4\"},\"yaxis4\":{\"domain\":[0.52,0.98],\"anchor\":\"x4\"}},\n",
" {\"linkText\":\"Export to plot.ly\",\"showLink\":true}\n",
")\n",
"\n",
"window.addEventListener('resize', function() {\n",
" Plotly.Plots.resize(document.getElementById('337a92eb-83a6-4c61-b2d4-e893a002d766'))\n",
"})\n",
" }) \n",
"</script>"
],
"text/plain": [
"#<Plotly::Offline::HTML:0x0000559c60d7e568 @id=\"337a92eb-83a6-4c61-b2d4-e893a002d766\", @data=[{:x=>[0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], :name=>\"Survived\", :type=>:histogram, :xaxis=>\"x\", :yaxis=>\"y\", :nbinsx=>20}, {:x=>[3, 1, 3, 1, 3, 3, 1, 3, 3, 2, 3, 1, 3, 3, 3, 2, 3, 2, 3, 3, 2, 2, 3, 1, 3, 3, 3, 1, 3, 3, 1, 1, 3, 2, 1, 1, 3, 3, 3, 3, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 1, 2, 1, 1, 2, 3, 2, 3, 3, 1, 1, 3, 1, 3, 2, 3, 3, 3, 2, 3, 2, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 1, 2, 3, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 1, 1, 2, 2], :name=>\"Pclass\", :type=>:histogram, :xaxis=>\"x2\", :yaxis=>\"y2\", :nbinsx=>20}, {:x=>[\"male\", \"female\", \"female\", \"female\", \"male\", \"male\", \"male\", \"male\", \"female\", \"female\", \"female\", \"female\", \"male\", \"male\", \"female\", \"female\", \"male\", \"male\", \"female\", \"female\", \"male\", \"male\", \"female\", \"male\", \"female\", \"female\", \"male\", \"male\", \"female\", \"male\", \"male\", \"female\", \"female\", \"male\", \"male\", \"male\", \"male\", \"male\", \"female\", \"female\", \"female\", \"female\", \"male\", \"female\", \"female\", \"male\", \"male\", \"female\", \"male\", \"female\", \"male\", \"male\", \"female\", \"female\", \"male\", \"male\", \"female\", \"male\", \"female\", \"male\", \"male\", \"female\", \"male\", \"male\", \"male\", \"male\", \"female\", \"male\", \"female\", \"male\", \"male\", \"female\", \"male\", \"male\", \"male\", \"male\", \"male\", \"male\", \"male\", \"female\", \"male\", \"male\", \"female\", \"male\", \"female\", \"female\", \"male\", \"male\", \"female\", \"male\", \"male\", \"male\", \"male\", \"male\", \"male\", \"male\", \"male\", \"male\", \"female\", \"male\"], :name=>\"Sex\", :type=>:histogram, :xaxis=>\"x3\", :yaxis=>\"y3\", :nbinsx=>20}, {:x=>[22.0, 38.0, 26.0, 35.0, 35.0, nil, 54.0, 2.0, 27.0, 14.0, 4.0, 58.0, 20.0, 39.0, 14.0, 55.0, 2.0, nil, 31.0, nil, 35.0, 34.0, 15.0, 28.0, 8.0, 38.0, nil, 19.0, nil, nil, 40.0, nil, nil, 66.0, 28.0, 42.0, nil, 21.0, 18.0, 14.0, 40.0, 27.0, nil, 3.0, 19.0, nil, nil, nil, nil, 18.0, 7.0, 21.0, 49.0, 29.0, 65.0, nil, 21.0, 28.5, 5.0, 11.0, 22.0, 38.0, 45.0, 4.0, nil, nil, 29.0, 19.0, 17.0, 26.0, 32.0, 16.0, 21.0, 26.0, 32.0, 25.0, nil, nil, 0.83, 30.0, 22.0, 29.0, nil, 28.0, 17.0, 33.0, 16.0, nil, 23.0, 24.0, 29.0, 20.0, 46.0, 26.0, 59.0, nil, 71.0, 23.0, 34.0, 34.0], :name=>\"Age\", :type=>:histogram, :xaxis=>\"x4\", :yaxis=>\"y4\", :nbinsx=>20}], @layout={:height=>700, :xaxis=>{:domain=>[0.02, 0.48], :anchor=>\"y\"}, :yaxis=>{:domain=>[0.02, 0.48], :anchor=>\"x\"}, :xaxis2=>{:domain=>[0.52, 0.98], :anchor=>\"y2\"}, :yaxis2=>{:domain=>[0.02, 0.48], :anchor=>\"x2\"}, :xaxis3=>{:domain=>[0.02, 0.48], :anchor=>\"y3\"}, :yaxis3=>{:domain=>[0.52, 0.98], :anchor=>\"x3\"}, :xaxis4=>{:domain=>[0.52, 0.98], :anchor=>\"y4\"}, :yaxis4=>{:domain=>[0.52, 0.98], :anchor=>\"x4\"}}, @config={:linkText=>\"Export to plot.ly\", :showLink=>true}, @embedded=true>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"#<CZTop::Socket::PUB:0x559c5f882dd0 last_endpoint=\"tcp://127.0.0.1:56273\">"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"num_column_names = %w[Survived Pclass Sex Age]\n",
"show_histograms(df, num_column_names, layout: { height: 700 })"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Ruby 2.5.1",
"language": "ruby",
"name": "ruby"
},
"language_info": {
"file_extension": ".rb",
"mimetype": "application/x-ruby",
"name": "ruby",
"version": "2.5.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment