├── requirements.txt
├── README.md
└── Poetry NLP Notebook.ipynb
/requirements.txt:
--------------------------------------------------------------------------------
1 | absl-py==0.9.0
2 | astunparse==1.6.3
3 | cachetools==4.1.0
4 | certifi==2020.4.5.1
5 | chardet==3.0.4
6 | click==7.1.2
7 | cycler==0.10.0
8 | gast==0.3.3
9 | google-auth==1.15.0
10 | google-auth-oauthlib==0.4.1
11 | google-pasta==0.2.0
12 | grpcio==1.29.0
13 | h5py==2.10.0
14 | idna==2.9
15 | importlib-metadata==1.6.0
16 | joblib==0.15.1
17 | Keras-Preprocessing==1.1.2
18 | kiwisolver==1.2.0
19 | Markdown==3.2.2
20 | matplotlib==3.2.1
21 | nltk==3.5
22 | numpy==1.18.4
23 | oauthlib==3.1.0
24 | opt-einsum==3.2.1
25 | pandas==1.0.3
26 | Pillow==7.1.2
27 | protobuf==3.12.2
28 | pyasn1==0.4.8
29 | pyasn1-modules==0.2.8
30 | pyparsing==2.4.7
31 | python-dateutil==2.8.1
32 | pytz==2020.1
33 | regex==2020.5.14
34 | requests==2.23.0
35 | requests-oauthlib==1.3.0
36 | rsa==4.0
37 | scikit-learn==0.23.1
38 | scipy==1.4.1
39 | seaborn==0.10.1
40 | six==1.15.0
41 | sklearn==0.0
42 | tensorboard==2.2.1
43 | tensorboard-plugin-wit==1.6.0.post3
44 | tensorflow==2.2.0
45 | tensorflow-estimator==2.2.0
46 | termcolor==1.1.0
47 | threadpoolctl==2.0.0
48 | tqdm==4.46.0
49 | urllib3==1.25.9
50 | Werkzeug==1.0.1
51 | wordcloud==1.7.0
52 | wrapt==1.12.1
53 | zipp==3.1.0
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # Poetry Classification Notebook
4 | 
5 | This notebook includes classification of poetry ages and authors with both RNNs and decision trees (because the size of data is too small).
6 |
7 |
8 | ## Models and Data Used
9 |
10 | - Data: Poetry from various poets such as William Shakespeare, different genres and different ages.
11 | - Classification Methods: Decision Trees (sklearn) and RNNs (tf.keras)
12 |
13 | 
14 |
15 | # Files
16 |
17 | - *all.csv* including data taken from [kaggle](https://www.kaggle.com/ishnoor/poetry-analysis-with-machine-learning?select=all.csv)
18 | - *poetry-nlp-notebook.ipynb* Interactive Python Notebook that includes the code itself
19 |
20 | ## Libraries Used
21 |
22 | nltk
23 | re
24 | keras
25 | seaborn
26 | matplotlib
27 | scikit-learn
28 | pandas
29 | tensorflow
30 | numpy
31 | wordcloud
32 | ps: All the libraries can be downloaded by pip install -r requirements.txt
33 |
34 |
35 | ## Author
36 |
37 | - **Merve Noyan** - [merveenoyan](https://github.com/merveenoyan)
38 |
39 | ## Further Notes
40 | Will migrate this project to tensorflow and generate poetry, stay tuned and watch this repo if you don't want to miss 🤓
41 |
42 | > Written with [StackEdit](https://stackedit.io/).
43 |
44 |
--------------------------------------------------------------------------------
/Poetry NLP Notebook.ipynb:
--------------------------------------------------------------------------------
1 | {"cells":[{"metadata":{},"cell_type":"markdown","source":"**Poetry Classification Notebook**"},{"metadata":{},"cell_type":"markdown","source":"I've came across this dataset as I was looking for renaissance paintings to use in GAN, and seeing there are no kernels on it, I thought I might just dive in. \nThere are five columns, the poetry itself, the type, author, age of it. First I'll do exploratory data analysis and preprocessing, then I'll classify the author and the age of the poetries using decision trees."},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom sklearn.model_selection import train_test_split\nfrom sklearn import preprocessing\nfrom sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer\nfrom sklearn.metrics import classification_report, confusion_matrix\nfrom sklearn.metrics import accuracy_score\nfrom nltk.corpus import stopwords\nfrom nltk.corpus import stopwords\nfrom wordcloud import WordCloud, STOPWORDS\nfrom sklearn.tree import DecisionTreeClassifier\nimport seaborn as sns\nimport gc\nimport re","execution_count":2,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import tensorflow as tf\nfrom tensorflow.keras.layers import GRU, LSTM, Embedding\nfrom tensorflow.keras.callbacks import EarlyStopping\nfrom tensorflow.keras import optimizers\nfrom tensorflow.keras.layers import Activation, Dense, Bidirectional","execution_count":3,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Importing the dataset**"},{"metadata":{"trusted":true},"cell_type":"code","source":"df_poetry=pd.read_csv(\"../input/poetry-analysis-with-machine-learning/all.csv\", sep=\",\")\ndf_poetry.head()","execution_count":4,"outputs":[{"output_type":"execute_result","execution_count":4,"data":{"text/plain":" author \\\n0 WILLIAM SHAKESPEARE \n1 DUCHESS OF NEWCASTLE MARGARET CAVENDISH \n2 THOMAS BASTARD \n3 EDMUND SPENSER \n4 RICHARD BARNFIELD \n\n content \\\n0 Let the bird of loudest lay\\r\\nOn the sole Ara... \n1 Sir Charles into my chamber coming in,\\r\\nWhen... \n2 Our vice runs beyond all that old men saw,\\r\\n... \n3 Lo I the man, whose Muse whilome did maske,\\r\\... \n4 Long have I longd to see my love againe,\\r\\nSt... \n\n poem name age type \n0 The Phoenix and the Turtle Renaissance Mythology & Folklore \n1 An Epilogue to the Above Renaissance Mythology & Folklore \n2 Book 7, Epigram 42 Renaissance Mythology & Folklore \n3 from The Faerie Queene: Book I, Canto I Renaissance Mythology & Folklore \n4 Sonnet 16 Renaissance Mythology & Folklore ","text/html":"
\n\n
\n \n
\n
\n
author
\n
content
\n
poem name
\n
age
\n
type
\n
\n \n \n
\n
0
\n
WILLIAM SHAKESPEARE
\n
Let the bird of loudest lay\\r\\nOn the sole Ara...
\n
The Phoenix and the Turtle
\n
Renaissance
\n
Mythology & Folklore
\n
\n
\n
1
\n
DUCHESS OF NEWCASTLE MARGARET CAVENDISH
\n
Sir Charles into my chamber coming in,\\r\\nWhen...
\n
An Epilogue to the Above
\n
Renaissance
\n
Mythology & Folklore
\n
\n
\n
2
\n
THOMAS BASTARD
\n
Our vice runs beyond all that old men saw,\\r\\n...
\n
Book 7, Epigram 42
\n
Renaissance
\n
Mythology & Folklore
\n
\n
\n
3
\n
EDMUND SPENSER
\n
Lo I the man, whose Muse whilome did maske,\\r\\...
\n
from The Faerie Queene: Book I, Canto I
\n
Renaissance
\n
Mythology & Folklore
\n
\n
\n
4
\n
RICHARD BARNFIELD
\n
Long have I longd to see my love againe,\\r\\nSt...
\n
Sonnet 16
\n
Renaissance
\n
Mythology & Folklore
\n
\n \n
\n
"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"First I'll do exploratory data analysis, then classify the poetries in age, type and author. Let's see the list of authors, types and ages."},{"metadata":{"trusted":true},"cell_type":"code","source":"df_poetry.rename(columns={\"poem name\":\"poem_name\"}, inplace=True)","execution_count":5,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_poetry.age.unique()","execution_count":6,"outputs":[{"output_type":"execute_result","execution_count":6,"data":{"text/plain":"array(['Renaissance', 'Modern'], dtype=object)"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"There are three types of poetry."},{"metadata":{"trusted":true},"cell_type":"code","source":"df_poetry.type.unique()","execution_count":7,"outputs":[{"output_type":"execute_result","execution_count":7,"data":{"text/plain":"array(['Mythology & Folklore', 'Nature', 'Love'], dtype=object)"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"Let's see the list of authors."},{"metadata":{"trusted":true},"cell_type":"code","source":"df_poetry.author.unique()","execution_count":8,"outputs":[{"output_type":"execute_result","execution_count":8,"data":{"text/plain":"array(['WILLIAM SHAKESPEARE', 'DUCHESS OF NEWCASTLE MARGARET CAVENDISH',\n 'THOMAS BASTARD', 'EDMUND SPENSER', 'RICHARD BARNFIELD',\n 'SIR WALTER RALEGH', 'QUEEN ELIZABETH I', 'JOHN DONNE',\n 'JOHN SKELTON', 'CHRISTOPHER MARLOWE', 'LADY MARY WROTH',\n 'ROBERT SOUTHWELL, SJ', 'WILLIAM BYRD', 'GEORGE GASCOIGNE',\n 'HENRY VIII, KING OF ENGLAND', 'SIR THOMAS WYATT', 'EN JONSON',\n 'ORLANDO GIBBONS', 'THOMAS NASHE', 'SIR PHILIP SIDNEY',\n 'SECOND BARON VAUX OF HARROWDEN THOMAS, LORD VAUX',\n 'HENRY HOWARD, EARL OF SURREY', 'GEORGE CHAPMAN', 'THOMAS CAMPION',\n 'ISABELLA WHITNEY', 'SAMUEL DANIEL', 'THOMAS HEYWOOD',\n 'GIOVANNI BATTISTA GUARINI', 'SIR EDWARD DYER', 'THOMAS LODGE',\n 'JOHN FLETCHER', 'EDGAR LEE MASTERS', 'WILLIAM BUTLER YEATS',\n 'FORD MADOX FORD', 'IVOR GURNEY', 'CARL SANDBURG', 'EZRA POUND',\n 'ELINOR WYLIE', 'GEORGE SANTAYANA', 'LOUISE BOGAN',\n 'KENNETH SLESSOR', 'HART CRANE', 'D. H. LAWRENCE',\n 'HUGH MACDIARMID', 'E. E. CUMMINGS', 'LOUIS UNTERMEYER',\n 'WALLACE STEVENS', 'MARJORIE PICKTHALL', 'RICHARD ALDINGTON',\n 'GUILLAUME APOLLINAIRE', 'SAMUEL GREENBERG', 'STEPHEN SPENDER',\n 'EDITH SITWELL', 'PAUL LAURENCE DUNBAR', 'SARA TEASDALE',\n 'MINA LOY', 'MARIANNE MOORE', 'ASIL BUNTING', 'MICHAEL ANANIA',\n 'ARCHIBALD MACLEISH', 'CONRAD AIKEN', 'MALCOLM COWLEY',\n 'KATHERINE MANSFIELD', 'T. S. ELIOT', 'GERTRUDE STEIN',\n 'JAMES JOYCE', 'KENNETH FEARING'], dtype=object)"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"**Removing special characters from the content column, leaving the spaces for tokenization**"},{"metadata":{"trusted":true},"cell_type":"code","source":"def remove_special_chars(text, remove_digits=True):\n text=re.sub('[^a-zA-Z.\\d\\s]', '',text)\n return text\ndf_poetry.content=df_poetry.content.apply(remove_special_chars)","execution_count":9,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Importing the list of stopwords, I have gathered the below gist def remove_stopwords from another notebook."},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder\nle=LabelEncoder()\ndf_poetry.age=le.fit_transform(df_poetry.age)\ndf_poetry","execution_count":10,"outputs":[{"output_type":"execute_result","execution_count":10,"data":{"text/plain":" author \\\n0 WILLIAM SHAKESPEARE \n1 DUCHESS OF NEWCASTLE MARGARET CAVENDISH \n2 THOMAS BASTARD \n3 EDMUND SPENSER \n4 RICHARD BARNFIELD \n.. ... \n568 SARA TEASDALE \n569 HART CRANE \n570 WILLIAM BUTLER YEATS \n571 CARL SANDBURG \n572 RICHARD ALDINGTON \n\n content \\\n0 Let the bird of loudest lay\\r\\nOn the sole Ara... \n1 Sir Charles into my chamber coming in\\r\\nWhen ... \n2 Our vice runs beyond all that old men saw\\r\\nA... \n3 Lo I the man whose Muse whilome did maske\\r\\nA... \n4 Long have I longd to see my love againe\\r\\nSti... \n.. ... \n568 With the man I love who loves me not\\r\\nI walk... \n569 Hart Crane Voyages I II III IV V VI from The C... \n570 When you are old and grey and full of sleep\\r\\... \n571 Give me hunger\\r\\nO you gods that sit and give... \n572 Potuia potuia\\r\\nWhite grave goddess\\r\\nPity m... \n\n poem_name age type \n0 The Phoenix and the Turtle 1 Mythology & Folklore \n1 An Epilogue to the Above 1 Mythology & Folklore \n2 Book 7, Epigram 42 1 Mythology & Folklore \n3 from The Faerie Queene: Book I, Canto I 1 Mythology & Folklore \n4 Sonnet 16 1 Mythology & Folklore \n.. ... ... ... \n568 Union Square 0 Love \n569 Voyages 0 Love \n570 When You Are Old 0 Love \n571 At a Window 0 Love \n572 To a Greek Marble 0 Love \n\n[573 rows x 5 columns]","text/html":"
\n\n
\n \n
\n
\n
author
\n
content
\n
poem_name
\n
age
\n
type
\n
\n \n \n
\n
0
\n
WILLIAM SHAKESPEARE
\n
Let the bird of loudest lay\\r\\nOn the sole Ara...
\n
The Phoenix and the Turtle
\n
1
\n
Mythology & Folklore
\n
\n
\n
1
\n
DUCHESS OF NEWCASTLE MARGARET CAVENDISH
\n
Sir Charles into my chamber coming in\\r\\nWhen ...
\n
An Epilogue to the Above
\n
1
\n
Mythology & Folklore
\n
\n
\n
2
\n
THOMAS BASTARD
\n
Our vice runs beyond all that old men saw\\r\\nA...
\n
Book 7, Epigram 42
\n
1
\n
Mythology & Folklore
\n
\n
\n
3
\n
EDMUND SPENSER
\n
Lo I the man whose Muse whilome did maske\\r\\nA...
\n
from The Faerie Queene: Book I, Canto I
\n
1
\n
Mythology & Folklore
\n
\n
\n
4
\n
RICHARD BARNFIELD
\n
Long have I longd to see my love againe\\r\\nSti...
\n
Sonnet 16
\n
1
\n
Mythology & Folklore
\n
\n
\n
...
\n
...
\n
...
\n
...
\n
...
\n
...
\n
\n
\n
568
\n
SARA TEASDALE
\n
With the man I love who loves me not\\r\\nI walk...
\n
Union Square
\n
0
\n
Love
\n
\n
\n
569
\n
HART CRANE
\n
Hart Crane Voyages I II III IV V VI from The C...
\n
Voyages
\n
0
\n
Love
\n
\n
\n
570
\n
WILLIAM BUTLER YEATS
\n
When you are old and grey and full of sleep\\r\\...
\n
When You Are Old
\n
0
\n
Love
\n
\n
\n
571
\n
CARL SANDBURG
\n
Give me hunger\\r\\nO you gods that sit and give...
"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_poetry.drop(columns=[\"author\", \"poem_name\",\"type\"])","execution_count":11,"outputs":[{"output_type":"execute_result","execution_count":11,"data":{"text/plain":" content age\n0 Let the bird of loudest lay\\r\\nOn the sole Ara... 1\n1 Sir Charles into my chamber coming in\\r\\nWhen ... 1\n2 Our vice runs beyond all that old men saw\\r\\nA... 1\n3 Lo I the man whose Muse whilome did maske\\r\\nA... 1\n4 Long have I longd to see my love againe\\r\\nSti... 1\n.. ... ...\n568 With the man I love who loves me not\\r\\nI walk... 0\n569 Hart Crane Voyages I II III IV V VI from The C... 0\n570 When you are old and grey and full of sleep\\r\\... 0\n571 Give me hunger\\r\\nO you gods that sit and give... 0\n572 Potuia potuia\\r\\nWhite grave goddess\\r\\nPity m... 0\n\n[573 rows x 2 columns]","text/html":"
\n\n
\n \n
\n
\n
content
\n
age
\n
\n \n \n
\n
0
\n
Let the bird of loudest lay\\r\\nOn the sole Ara...
\n
1
\n
\n
\n
1
\n
Sir Charles into my chamber coming in\\r\\nWhen ...
\n
1
\n
\n
\n
2
\n
Our vice runs beyond all that old men saw\\r\\nA...
\n
1
\n
\n
\n
3
\n
Lo I the man whose Muse whilome did maske\\r\\nA...
\n
1
\n
\n
\n
4
\n
Long have I longd to see my love againe\\r\\nSti...
\n
1
\n
\n
\n
...
\n
...
\n
...
\n
\n
\n
568
\n
With the man I love who loves me not\\r\\nI walk...
\n
0
\n
\n
\n
569
\n
Hart Crane Voyages I II III IV V VI from The C...
\n
0
\n
\n
\n
570
\n
When you are old and grey and full of sleep\\r\\...
\n
0
\n
\n
\n
571
\n
Give me hunger\\r\\nO you gods that sit and give...
"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"Heat map between label encoded features."},{"metadata":{"trusted":true},"cell_type":"code","source":"sns.heatmap(corr, \n xticklabels=corr.columns,\n yticklabels=corr.columns)","execution_count":31,"outputs":[{"output_type":"execute_result","execution_count":31,"data":{"text/plain":""},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"","image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"metadata":{},"cell_type":"markdown","source":"Categorical plot to explain distribution of type and authors of poetry through the ages. It'd be better if the ages were given in years instead of two categories."},{"metadata":{"trusted":true},"cell_type":"code","source":"sns.catplot(x=\"age\", y=\"author\",hue=\"type\", data=df_poetry);","execution_count":32,"outputs":[{"output_type":"display_data","data":{"text/plain":"","image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"metadata":{},"cell_type":"markdown","source":"First I'll separate the dataset for training and test, then I'll vectorize both sets with TFIDF and Count Vectorizer, and then apply decision tree for classification."},{"metadata":{"trusted":true},"cell_type":"code","source":"y=df_poetry['author']\nx=df_poetry[\"content\"]\nX_train, X_test, y_train, y_test =train_test_split(x,y,test_size=0.33, random_state=50)\nprint(X_train)","execution_count":33,"outputs":[{"output_type":"stream","text":"526 [i carry your heart with me(i carry it in] Cop...\n63 Full fathom five thy father lies;\\r\\nOf his bo...\n158 Love is a sickness full of woes,\\r\\nAll remedi...\n248 No spring nor summer beauty hath such grace\\r\\...\n175 Come away, come away, death,\\r\\n And in sad...\n ... \n70 How like a winter hath my absence been\\r\\nFrom...\n132 Stella, think not that I by verse seek fame,\\r...\n289 If thou survive my well-contented day,\\r\\nWhen...\n109 Ye tradefull Merchants that with weary toyle,\\...\n480 [Version 1: 1921]\\r\\nThe quick sparks on the g...\nName: content, Length: 383, dtype: object\n","name":"stdout"}]},{"metadata":{},"cell_type":"raw","source":"Trying to predict the author of the poem from the content. Used Count Vectorizer and Decision Tree Classifier with entropy."},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.feature_extraction.text import TfidfVectorizer\nvectorizer = TfidfVectorizer()\nvectrain = vectorizer.fit_transform(X_train)\nvectest = vectorizer.transform(X_test)","execution_count":34,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"vectest.shape","execution_count":35,"outputs":[{"output_type":"execute_result","execution_count":35,"data":{"text/plain":"(190, 9936)"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train.shape","execution_count":36,"outputs":[{"output_type":"execute_result","execution_count":36,"data":{"text/plain":"(383,)"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"dtclassifier=DecisionTreeClassifier(criterion=\"entropy\", max_depth=None)\ndtclassifier.fit(vectrain,y_train)\npreddt = dtclassifier.predict(vectest)","execution_count":37,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"accuracy= accuracy_score(preddt,y_test)\nprint(accuracy)","execution_count":38,"outputs":[{"output_type":"stream","text":"0.35789473684210527\n","name":"stdout"}]},{"metadata":{},"cell_type":"markdown","source":"Trying to predict the age of the poem from the content. Used Count Vectorizer and Decision Tree Classifier with entropy."},{"metadata":{"trusted":true},"cell_type":"code","source":"y=df_poetry['age']\nx=df_poetry[\"content\"]\nX_train, X_test, y_train, y_test =train_test_split(x,y,test_size=0.33, random_state=50)","execution_count":39,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"vectorizer = TfidfVectorizer()\nvectrain = vectorizer.fit_transform(X_train)\nvectest = vectorizer.transform(X_test)","execution_count":40,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"dtclassifier=DecisionTreeClassifier(criterion=\"entropy\", max_depth=None)\ndtclassifier.fit(vectrain,y_train)\npreddt = dtclassifier.predict(vectest)","execution_count":41,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"accuracy= accuracy_score(preddt,y_test)\nprint(accuracy)","execution_count":42,"outputs":[{"output_type":"stream","text":"0.868421052631579\n","name":"stdout"}]},{"metadata":{},"cell_type":"markdown","source":"Trying to predict authors from rest of the features this time, I don't expect too much of an improvement. Used Tfidf vectorizer and decision tree with gini index as split criterion."},{"metadata":{"trusted":true},"cell_type":"code","source":"y=df_poetry['author']\nX=df_poetry.loc[:, df_poetry.columns!=\"author\"]\nX_train, X_test, y_train, y_test =train_test_split(x,y,test_size=0.33, random_state=50)","execution_count":43,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"vectorizer = TfidfVectorizer()\nvectrain = vectorizer.fit_transform(X_train)\nvectest = vectorizer.transform(X_test)","execution_count":44,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"dtclassifier=DecisionTreeClassifier(criterion=\"gini\", max_depth=None)\ndtclassifier.fit(vectrain,y_train)\npreddt = dtclassifier.predict(vectest)","execution_count":45,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"accuracy= accuracy_score(preddt,y_test)\nprint(accuracy)","execution_count":46,"outputs":[{"output_type":"stream","text":"0.4\n","name":"stdout"}]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}
--------------------------------------------------------------------------------