0% found this document useful (0 votes)
31 views91 pages

Ebooks File Data Mining With Python Theory Application and Case Studies 1st Edition Di Wu All Chapters

The document promotes the ebook 'Data Mining with Python: Theory, Application, and Case Studies' by Di Wu, available for download on ebookgate.com. It highlights the book's focus on practical skills in data mining using Python, structured around the data mining pipeline, and includes interactive tutorials and case studies. Additionally, it provides information on other related ebooks and resources available on the same platform.

Uploaded by

kreiegreisop
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views91 pages

Ebooks File Data Mining With Python Theory Application and Case Studies 1st Edition Di Wu All Chapters

The document promotes the ebook 'Data Mining with Python: Theory, Application, and Case Studies' by Di Wu, available for download on ebookgate.com. It highlights the book's focus on practical skills in data mining using Python, structured around the data mining pipeline, and includes interactive tutorials and case studies. Additionally, it provides information on other related ebooks and resources available on the same platform.

Uploaded by

kreiegreisop
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 91

Get the full ebook with Bonus Features for a Better Reading Experience on ebookgate.

com

Data Mining with Python Theory Application and


Case Studies 1st Edition Di Wu

https://ebookgate.com/product/data-mining-with-python-
theory-application-and-case-studies-1st-edition-di-wu/

OR CLICK HERE

DOWLOAD NOW

Download more ebook instantly today at https://ebookgate.com


Instant digital products (PDF, ePub, MOBI) available
Download now and explore formats that suit you...

Data Mining with R Learning with Case Studies Chapman Hall


CRC Data Mining and Knowledge Discovery Series 1st Edition
Torgo
https://ebookgate.com/product/data-mining-with-r-learning-with-case-
studies-chapman-hall-crc-data-mining-and-knowledge-discovery-
series-1st-edition-torgo/
ebookgate.com

Data Science Fundamentals with R Python and Open Data 1st


Edition Marco Cremonini

https://ebookgate.com/product/data-science-fundamentals-with-r-python-
and-open-data-1st-edition-marco-cremonini/

ebookgate.com

Data Mining Using SAS Enterprise Miner A Case Study


Approach 2nd Edition

https://ebookgate.com/product/data-mining-using-sas-enterprise-miner-
a-case-study-approach-2nd-edition/

ebookgate.com

Pattern Discovery Using Sequence Data Mining Applications


and Studies 1st Edition Pradeep Kumar

https://ebookgate.com/product/pattern-discovery-using-sequence-data-
mining-applications-and-studies-1st-edition-pradeep-kumar/

ebookgate.com
Applying Theory to Educational Research An Introductory
Approach with Case Studies 1st Edition Jeff Adams

https://ebookgate.com/product/applying-theory-to-educational-research-
an-introductory-approach-with-case-studies-1st-edition-jeff-adams/

ebookgate.com

Traditional Neutrality Revisited Law Theory and Case


Studies 1st Edition Elizabeth Chadwick

https://ebookgate.com/product/traditional-neutrality-revisited-law-
theory-and-case-studies-1st-edition-elizabeth-chadwick/

ebookgate.com

Cases on Health Outcomes and Clinical Data Mining Studies


and Frameworks Premier Reference Source 1st Edition
Patricia Cerrito
https://ebookgate.com/product/cases-on-health-outcomes-and-clinical-
data-mining-studies-and-frameworks-premier-reference-source-1st-
edition-patricia-cerrito/
ebookgate.com

Data Mining and Management 1st Edition Lawrence I.


Spendler

https://ebookgate.com/product/data-mining-and-management-1st-edition-
lawrence-i-spendler/

ebookgate.com

Handbook of Statistics 24 Data Mining and Data


Visualization C.R. Rao

https://ebookgate.com/product/handbook-of-statistics-24-data-mining-
and-data-visualization-c-r-rao/

ebookgate.com
Data Mining with Python

Data is everywhere and it’s growing at an unprecedented rate. But making sense of all that data
is a challenge. Data Mining is the process of discovering patterns and knowledge from large data
sets, and Data Mining with Python focuses on the hands-on approach to learning Data Mining.
It showcases how to use Python Packages to fulfil the Data Mining pipeline, which is to collect,
integrate, manipulate, clean, process, organize, and analyze data for knowledge.

The contents are organized based on the Data Mining pipeline, so readers can naturally prog-
ress step by step through the process. Topics, methods, and tools are explained in three aspects:
“What it is” as a theoretical background, “why we need it” as an application orientation, and
“how we do it” as a case study.

This book is designed to give students, data scientists, and business analysts an understanding of
Data Mining concepts in an applicable way. Through interactive tutorials that can be run, modi-
fied, and used for a more comprehensive learning experience, this book will help its readers gain
practical skills to implement Data Mining techniques in their work.

Dr. Di Wu is an Assistant Professor of Finance, Information Systems, and Economics department


of Business School, Lehman College. He obtained a Ph.D. in Computer Science from the Graduate
Center, CUNY. Dr. Wu's research interests includeTemporal extensions to RDF and semantic
web, Applied Data Science, and Experiential Learning and Pedagogy in Business Education.
Dr. Wu developed and taught courses including Strategic Management, Databases, Business
Statistics, Management Decision Making, Programming Languages (C++, Java, and Python),
Data Structures and Algorithms, Data Mining, Big Data, and Machine Learning.
Chapman & Hall/CRC

The Python Series


About the Series

Python has been ranked as the most popular programming language, and it is widely used in
education and industry. This book series will offer a wide range of books on Python for students
and professionals. Titles in the series will help users learn the language at an introductory and
advanced level, and explore its many applications in data science, AI, and machine learning.
Series titles can also be supplemented with Jupyter notebooks.

Image Processing and Acquisition using Python, Second Edition


Ravishankar Chityala, Sridevi Pudipeddi
Python Packages
Tomas Beuzen and Tiffany-Anne Timbers
Statistics and Data Visualisation with Python
Jesús Rogel-Salazar
Introduction to Python for Humanists
William J.B. Mattingly

Python for Scientific Computation and Artificial Intelligence


Stephen Lynch

Learning Professional Python Volume 1: The Basics


Usharani Bhimavarapu and Jude D. Hemanth

Learning Professional Python Volume 2: Advanced


Usharani Bhimavarapu and Jude D. Hemanth

Learning Advanced Python from Open Source Projects


Rongpeng Li

Foundations of Data Science with Python


John Mark Shea

Data Mining with Python: Theory, Application, and Case Studies


Di Wu

For more information about this series please visit: https://www.crcpress.com/Chapman--Hall-


CRC/book-series/PYTH
Data Mining with Python
Theory, Application, and Case Studies

Di Wu
First edition published 2024
by CRC Press
2385 Executive Center Drive, Suite 320, Boca Raton, FL 33431

and by CRC Press


4 Park Square, Milton Park, Abingdon, Oxon, OX14 4RN

CRC Press is an imprint of Taylor & Francis Group, LLC

© 2024 Di Wu

Reasonable efforts have been made to publish reliable data and information, but the author and publisher cannot as-
sume responsibility for the validity of all materials or the consequences of their use. The authors and publishers have
attempted to trace the copyright holders of all material reproduced in this publication and apologize to copyright holders
if permission to publish in this form has not been obtained. If any copyright material has not been acknowledged please
write and let us know so we may rectify in any future reprint.

Except as permitted under U.S. Copyright Law, no part of this book may be reprinted, reproduced, transmitted, or
utilized in any form by any electronic, mechanical, or other means, now known or hereafter invented, including pho-
tocopying, microfilming, and recording, or in any information storage or retrieval system, without written permission
from the publishers.

For permission to photocopy or use material electronically from this work, access www.copyright.com or contact the
Copyright Clearance Center, Inc. (CCC), 222 Rosewood Drive, Danvers, MA 01923, 978-750-8400. For works that are not
available on CCC please contact [email protected]

Trademark notice: Product or corporate names may be trademarks or registered trademarks and are used only for iden-
tification and explanation without intent to infringe.

ISBN: 978-1-032-61264-5 (hbk)


ISBN: 978-1-032-59890-1 (pbk)
ISBN: 978-1-003-46278-1 (ebk)

DOI: 10.1201/9781003462781

Typeset in Latin Modern font


by KnowledgeWorks Global Ltd.

Publisher’s note: This book has been prepared from camera-ready copy provided by the authors.

Access the Support Material]: https://www.routledge.com/9781032598901


Dedication
Students, Staff, and Colleagues
at University of Colorado Boulder and Lehman College
Contents

List of Figures xi

Foreword xix

Preface xxi

Author Bios xxiii

Section I Data Wrangling

Chapter 1 ■ Data Collection 3


1.1 COLLECT DATA FROM FILES 4
1.1.1 Tutorial – Collect Data from Files 5
1.1.2 Documentation 13
1.2 COLLECT DATA FROM THE WEB 14
1.2.1 Tutorial – Collect Data from Web 15
1.2.2 Case Study – Collect Weather Data from Web 20
1.3 COLLECT DATA FROM SQL DATABASES 23
1.3.1 Tutorial – Collect Data from SQLite 24
1.3.2 Case Study – Collect Shopping Data from SQLite 28
1.4 COLLECT DATA THROUGH APIS 31
1.4.1 Tutorial – Collect Data from Yahoo 32

Chapter 2 ■ Data Integration 37


2.1 DATA INTEGRATION 37
2.1.1 Tutorial – Data Integration 38
2.1.2 Case Study – Data Science Salary 44

vii
viii ■ Contents

Chapter 3 ■ Data Statistics 53


3.1 DESCRIPTIVE DATA ANALYSIS 53
3.1.1 Tutorial – Statistical Understanding 54
3.1.2 Case Study – Statistical Understanding of YouTube and Spotify 59

Chapter 4 ■ Data Visualization 66


4.1 DATA VISUALIZATION WITH PANDAS 67
4.1.1 Tutorial – Data Visualization with Pandas 67
4.2 DATA VISUALIZATION WITH MATPLOTLIB 76
4.2.1 Tutorial – Data Visualization with Matplotlib 77
4.3 DATA VISUALIZATION WITH SEABORN 106
4.3.1 Tutorial – Data Visualization with Seaborn 106

Chapter 5 ■ Data Preprocessing 131


5.1 DEALING WITH MISSING VALUES 131
5.1.1 Tutorial – Handling Missing Values 132
5.2 DEALING WITH OUTLIERS 139
5.2.1 Tutorial – Detect Outliers Using IQR 139
5.2.2 Tutorial – Detect Outliers Using Statistics 144
5.3 DATA REDUCTION 146
5.3.1 Tutorial – Dimension Elimination 146
5.3.2 Tutorial – Sampling 148
5.4 DATA DISCRETIZATION AND SCALING 150
5.4.1 Tutorial – Data Discretization 151
5.4.2 Tutorial – Data Scaling 154
5.5 DATA WAREHOUSE 157
5.5.1 Tutorial – Data Cube 158
5.5.2 Tutorial – Pivot Table 162

Section II Data Analysis

Chapter 6 ■ Classification 171


6.1 NEAREST NEIGHBOR CLASSIFIERS 172
6.1.1 Tutorial – Iris Binary Classification Using KNN 172
6.1.2 Tutorial – Iris Multiclass Classification Using KNN 177
6.1.3 Tutorial – Iris Binary Classification Using RNN 182
6.1.4 Tutorial – Iris Multiclass Classification Using RNN 188
6.1.5 Case Study – Breast Cancer Classification Using Nearest
Neighbor Classifiers 193
Contents ■ ix

6.2 DECISION TREE CLASSIFIERS 196


6.2.1 Tutorial – Iris Binary Classification Using Decision Tree 197
6.2.2 Tutorial – Iris Multiclass Classification Using Decision Tree 204
6.2.3 Case Study – Breast Cancer Classification Using Decision Tree 212
6.3 SUPPORT VECTOR MACHINE CLASSIFIERS 215
6.3.1 Tutorial – Iris Binary Classification Using SVM 215
6.3.2 Tutorial – Iris Multiclass Classification Using SVM 218
6.3.3 Case Study – Breast Cancer Classification Using SVM 220
6.4 NAIVE BAYES CLASSIFIERS 222
6.4.1 Tutorial – Iris Binary Classification Using Naive Bayes 222
6.4.2 Tutorial – Iris Multiclass Classification Using Naive Bayes 225
6.4.3 Case Study – Breast Cancer Classification Using Naive Bayes 227
6.5 LOGISTIC REGRESSION CLASSIFIERS 229
6.5.1 Tutorial – Iris Binary Classification Using Logistic Regression 229
6.5.2 Tutorial – Iris Multiclass Classification Using Logistic
Regression 231
6.5.3 Case Study – Breast Cancer Classification Using Logistic
Regression 234
6.6 CLASSIFICATION METHODS’ COMPARISON 236
6.6.1 Case Study – Wine Classification Using Multiple Classifiers 236

Chapter 7 ■ Regression 242


7.1 SIMPLE REGRESSION 242
7.1.1 Tutorial – California Housing Price 243
7.1.2 Tutorial – California Housing Price 249
7.2 MULTIPLE REGRESSION 254
7.2.1 Tutorial – California Housing Price 255
7.3 REGULARIZATION 259
7.3.1 Tutorial – Regularization 259
7.3.2 Case Study – California Housing Price 263
7.4 CROSS-VALIDATION 270
7.4.1 Tutorial – Cross-Validation 270
7.4.2 Case Study – California Housing Price 273
7.5 ENSEMBLE METHODS 275
7.5.1 Tutorial – Iris Binary Classification Using Random Forests 276
7.5.2 Tutorial – Iris Multi Classification Using Random Forests 278
x ■ Contents

7.5.3 Case Study – California Housing Price 280


7.6 REGRESSION METHODS’ COMPARISON 288
7.6.1 Case Study – Diabetes 288

Chapter 8 ■ Clustering 298


8.1 PARTITION CLUSTERING 298
8.1.1 Tutorial 299
8.1.2 Case Study 309
8.2 HIERARCHICAL CLUSTERING 313
8.2.1 Tutorial 313
8.2.2 Case Study 316
8.3 DENSITY-BASED CLUSTERING 318
8.3.1 Tutorial 318
8.3.2 Case Study 321
8.4 GRID-BASED CLUSTERING 324
8.4.1 Tutorial 324
8.4.2 Case Study 327
8.5 PRINCIPAL COMPONENT ANALYSIS 331
8.5.1 Tutorial 332
8.5.2 Case Study 344
8.6 CLUSTERING METHODS’ COMPARISON 351
8.6.1 Case Study 351

Chapter 9 ■ Frequent Patterns 356


9.1 FREQUENT ITEMSET AND ASSOCIATION RULES 356
9.1.1 Tutorial – Finding Frequent Itemset 357
9.1.2 Tutorial – Detecting Association Rules 358
9.2 APRIORI AND FP-GROWTH ALGORITHMS 361
9.2.1 Tutorial – Apriori Algorithm 361
9.2.2 Tutorial – FP-Growth Algorithm 364
9.2.3 Case Study – Online Retail 366

Chapter 10 ■ Outlier Detection 370


10.1 OUTLIER DETECTION 371
10.1.1 Tutorial 371
10.1.2 Case Study 379

Index 389
List of Figures

4.1 A Scatter Plot 69


4.2 A Line Plot 69
4.3 Another Line Plot 70
4.4 An Area Plot 70
4.5 Another Area Plot 71
4.6 A Bar Plot 71
4.7 A Horizontal Bar Plot 72
4.8 A Histogram 72
4.9 Another Histogram Plot 73
4.10 Another Histogram Plot 73
4.11 Another Histogram Plot with Density 74
4.12 A Box Plot 74
4.13 Another Box Plot 75
4.14 A Pie Plot 75
4.15 A Color Map 76
4.16 A Simple Plot 78
4.17 A Scatter Plot with Marker o 78
4.18 A Scatter Plot with Marker * 79
4.19 A Scatter Plot with Marker. 79
4.20 A Scatter Plot with Marker , 80
4.21 A Scatter Plot with Marker x 80
4.22 A Scatter Plot with Marker X 81
4.23 A Scatter Plot with Marker + 81
4.24 A Scatter Plot with Marker P 82
4.25 A Scatter Plot with Marker s 82
4.26 A Scatter Plot with Marker D 83
4.27 A Scatter Plot with Marker d 83
4.28 A Scatter Plot with Marker p 84

xi
xii ■ LIST OF FIGURES

4.29 A Scatter Plot with Marker H 84


4.30 A Scatter Plot with Marker h 85
4.31 A Scatter Plot with Marker o 85
4.32 A Scatter Plot with Markerˆ 86
4.33 A Scatter Plot with Marker < 86
4.34 A Scatter Plot with Marker > 87
4.35 A Scatter Plot with Marker 1 87
4.36 A Scatter Plot with Marker 2 88
4.37 A Scatter Plot with Marker 3 88
4.38 A Scatter Plot with Marker 4 89
4.39 A Scatter Plot with Marker | 89
4.40 A Scatter Plot with Marker - 90
4.41 A Line Plot 90
4.42 A Line Plot 91
4.43 A Line Plot 91
4.44 A Line Plot 92
4.45 A Line Plot 92
4.46 A Line Plot 93
4.47 A Line Plot 93
4.48 A Line Plot 94
4.49 A Line Plot 94
4.50 A Line Plot 95
4.51 A Line Plot 95
4.52 A Line Plot 96
4.53 A Line Plot 96
4.54 A Line Plot 97
4.55 A Scatter Plot 97
4.56 A Colorbar Plot 98
4.57 A Scatter Plot with Different Dot-Sizes 98
4.58 A Scatter Plot with Colorbar and Different Dot-Sizes 99
4.59 A Bar Plot 100
4.60 A Histogram Plot 100
4.61 Another Histogram Plot 101
4.62 A Pie Plot 101
4.63 An Explode Pie Plot 102
4.64 A Box Plot 102
LIST OF FIGURES ■ xiii

4.65 A Violin Plot 103


4.66 A Multi-Plot 104
4.67 A Multi-Plot with Legend and Grid 104
4.68 A Multi-Plot as Stacks 105
4.69 A Multi-Plot as Columns 106
4.70 A Default Relational Plot 107
4.71 A Default Relational Plot with Gender Differentiation 107
4.72 A Default Relational Plot with Day Differentiation 108
4.73 A Default Relational Plot with Time Differentiation 108
4.74 A Default Relational Plot with Time Differentiation in Multicolumns 109
4.75 A Default Relational Plot with Size Differentiation 109
4.76 A Default Relational Plot with Size Differentiation and Different
Dot-Sizes 110
4.77 A Default Relational Plot with Large Size Differentiation 110
4.78 A Default Relational Plot with Large Size Differentiation
and Transparency 111
4.79 A Default Relational Plot with Categorical Xs 111
4.80 A Line Relational Plot 112
4.81 A Line Relational Plot with Gender Differentiation 112
4.82 A Line Relational Plot with Gender Differentiation in Multicolumns 113
4.83 A Default Distribution Plot 113
4.84 A Default Distribution Plot in Multicolumns 114
4.85 A Default Distribution Plot with Gender Differentiation 114
4.86 A Default Distribution Plot with Gender Differentiation
in Multicolumns 115
4.87 A KDE Distribution Plot with Gender Differentiation 115
4.88 A KDE Distribution Plot with Gender Differentiation and Stacking 116
4.89 A KDE Distribution Plot with Gender Differentiation, Stacking in
Multicolumns 116
4.90 A KDE Distribution Plot with Two Attributes 117
4.91 A KDE Distribution Plot with Two Attributes and Gender
Differentiation 117
4.92 A KDE Distribution Plot with Two Attributes and Rug 118
4.93 An ECDF Distribution Plot 118
4.94 An ECDF Distribution Plot with Gender Differentiation 119
4.95 An ECDF Distribution Plot with Gender Differentiation
in Multicolumns 119
xiv ■ LIST OF FIGURES

4.96 A Default Categorical Plot 120


4.97 A Default Categorical Plot with Gender Differentiation 120
4.98 A Box Categorical Plot 121
4.99 A Box Categorical Plot with Gender Differentiation 121
4.100 A Violin Categorical Plot 122
4.101 A Violin Categorical Plot with Gender Differentiation 122
4.102 Another Violin Categorical Plot with Gender Differentiation 123
4.103 A Violin Plot with Gender Differentiation and Quartile 123
4.104 A Bar Categorical Plot 124
4.105 A Bar Categorical Plot with Gender Differentiation 124
4.106 A Joint Plot 125
4.107 Another Joint Plot 125
4.108 Another Joint Plot 126
4.109 Another Joint Plot 126
4.110 Another Joint Plot 127
4.111 Another Joint Plot 127
4.112 Another Joint Plot 128
4.113 Another Joint Plot 128
4.114 A Pair Plot 129
4.115 A Pair Plot with Gender Differentiation 130

5.1 The Distribution Plot before Removing Outliers 141


5.2 The Box Plot before Removing Outliers 141
5.3 The Distribution Plot after Removing Outliers 143
5.4 The Box Plot after Removing Outliers 143
5.5 The Box Plot before Removing Outliers 145
5.6 The Box Plot after Removing Outliers 145

6.1 A Scatter Plot of Sepal Length VS Sepal Width with Species


Differentiation 173
6.2 A Scatter Plot of Sepal Length VS Sepal Width with Species
Differentiation 178
6.3 A Scatter Plot of Sepal Length VS Sepal Width with Species
Differentiation 184
6.4 A Scatter Plot of Sepal Length VS Sepal Width with Species
Differentiation 189
6.5 Accuracy of KNN Models 196
6.6 Accuracy of RNN Models 196
LIST OF FIGURES ■ xv

6.7 A Scatter Plot of Sepal Length VS Sepal Width with Species


Differentiation 198
6.8 A Default Decision Tree 200
6.9 A Decision Tree Trained with Entropy 201
6.10 A Decision Tree Trained with Max Depth as 1 202
6.11 A Decision Tree Trained with Max Depth as 3 203
6.12 A Scatter Plot of Sepal Length VS Sepal Width with Species
Differentiation 206
6.13 A Default Decision Tree 208
6.14 A Decision Tree Trained with Entropy 209
6.15 A Decision Tree Trained with Max Depth as 1 210
6.16 A Decision Tree Trained with Max Depth as 3 211
6.17 Accuracy VS Max Depth for Different Splitting Criteria 215
6.18 A Scatter Plot of Sepal Length VS Sepal Width with Species
Differentiation 217
6.19 A Scatter Plot of Sepal Length VS Sepal Width with Species
Differentiation 219
6.20 Accuracy VS Regularization Parameter (C) for SVM 222
6.21 A Scatter Plot of Sepal Length VS Sepal Width with Species
Differentiation 224
6.22 A Scatter Plot of Sepal Length VS Sepal Width with Species
Differentiation 226
6.23 A Scatter Plot of Sepal Length VS Sepal Width with Species
Differentiation 230
6.24 A Scatter Plot of Sepal Length VS Sepal Width with Species
Differentiation 233
6.25 Accuracy VS Regularization Parameter (C) 236
6.26 Accuracy Comparison Among Classification Methods 241

7.1 A Scatter Plot of Total Rooms VS Total Bedrooms 244


7.2 A Comparison with Predicted and True Values 245
7.3 A Scatter Plot of Median Income VS Median House Value 246
7.4 A Comparison with Predicted and True Values 247
7.5 A Scatter Plot of Households VS Population 248
7.6 A Comparison with Predicted and True Values 249
7.7 A Scatter Plot of X VS Y 250
7.8 A Scatter Plot of X VS Y 251
7.9 A Comparison with Predicted and True Values 253
xvi ■ LIST OF FIGURES

7.10 A Comparison with Predicted and True Values 254


7.11 A Comparison with Predicted and True Values 257
7.12 A Comparison with Predicted and True Values 258
7.13 A Scatter Plot of X VS Y 260
7.14 Performance Comparison between Polynomial Regression
and Regularization 270
7.15 A Scatter Plot of X VS Y 271
7.16 Mean Squared Error for Different Cross-Validation Techniques 273
7.17 Mean Squared Error for Different Cross-Validation Techniques 275
7.18 A Scatter Plot of Sepal Length VS Sepal Width with Species
Differentiation 277
7.19 A Scatter Plot of Sepal Length VS Sepal Width with Species
Differentiation 279
7.20 R-Squared Scores for Different Models 287
7.21 Comparison of Regression Methods on Diabetes Dataset 297

8.1 A Scatter Plot of X VS Y 300


8.2 K-Means Result with Cluster Differentiation 300
8.3 KMedoids Result with Cluster Differentiation 301
8.4 A Scatter Plot of X VS Y 302
8.5 K-Means Result with Cluster Differentiation 302
8.6 K-Medoids Result with Cluster Differentiation 303
8.7 A Scatter Plot of X VS Y 304
8.8 K-Means Result with Cluster Differentiation 304
8.9 K-Medoids Result with Cluster Differentiation 305
8.10 A Scatter Plot of X VS Y 306
8.11 K-Means Result with Cluster Differentiation 306
8.12 K-Medoids Result with Cluster Differentiation 307
8.13 A Scatter Plot of X VS Y 308
8.14 K-Means Result with Cluster Differentiation 308
8.15 K-Medoids Result with Cluster Differentiation 309
8.16 A Comparison with K-Means and K-Medoids Clustering 313
8.17 A Scatter Plot of Feature1 VS Feature2 315
8.18 DBSCAN Result with Three Clusters 320
8.19 Comparison among DBSCAN Results 323
8.20 A Scatter Plot of Feature1 VS Feature2 325
8.21 STING Clustering Result 326
LIST OF FIGURES ■ xvii

8.22 CLIQUE Clustering Result 327


8.23 CLIQUE Clustering Result 327
8.24 A Scatter Plot of Feature1 VS Feature2 328
8.25 STING Clustering Result 329
8.26 OPTICS Clustering Result 330
8.27 DBSCAN Clustering Result 331
8.28 Digit 0 333
8.29 Digit 0 333
8.30 Digit 1 334
8.31 Digit 2 334
8.32 Digit 3 335
8.33 Digit 4 335
8.34 Digit 5 336
8.35 Digit 6 336
8.36 Digit 7 337
8.37 Digit 8 337
8.38 Digit 9 338
8.39 K-Means Clustering 353
8.40 Agglomerative Clustering 354
8.41 DBSCAN Clustering 355

10.1 A Scatter Plot of Feature1 VS Feature2 with Colorbar 372


10.2 Outlier Detection by Z-Score 373
10.3 Outlier Detection by IQR 374
10.4 Outlier Detection by One-Class SVM 375
10.5 Outlier Detection by Isolation Forest 377
10.6 Outlier Detection by DBSCAN 378
10.7 Outlier Detection by LOF 379
10.8 Outlier Detection by Z-Score 383
10.9 Outlier Detection by IQR 384
10.10 Outlier Detection by One-Class SVM 385
10.11 Outlier Detection by Isolation Forest 386
10.12 Outlier Detection by DBSCAN 387
10.13 Outlier Detection by LOF 388
Foreword

WHY WE NEED THIS BOOK


Data is everywhere and it’s growing at an unprecedented rate. But making sense
of all that data is a challenge. Data Mining is the process of discovering patterns
and knowledge from large data sets. This book focuses on the hands-on approach
to learn Data Mining. This book is designed to give you an understanding of Data
Mining concepts in an applicable way. The tutorials in this book will help you to gain
practical skills to implement Data Mining techniques in your work. Whether you are
a student, a data scientist, or a business analyst, this book is a must-read for you.

xix
Preface

HOW TO USE THIS BOOK


This book is served as complementary to a theoretical Data Mining course. We intend
to keep the introductions brief and simple and concentrate on detailed tutorials. The
book is divided into two parts: Part 1 covers the preparation of data or Data Wrangling.
Part 2 covers the analysis of data or Data Analysis. For readers’ convenience, besides
including all tutorials within pages, we also provide the .ipynb files with associated
data sets through links. When you run the .ipynb files, please make sure the data
path is updated in your local/cloud environment.

WHY THIS BOOK IS DIFFERENT


While there are many books, websites, online courses about the topic, we differentiate
our book in multiple ways:
• We organized the contents based on the Data Mining pipeline, so readers can
naturally gain the formal process from raw data to knowledge step by step.
Readers can have a full stack of consistent learning, rather than learning from
pieces from multiple sources.
• For the topics, methods, and tools we cover in the book, we explain them in
three aspects: “What it is” as a theoretical background, “Why we need it” as
an application orientation, and “How we do it” as a case study.
• Our book is “LIVE”. All tutorials are runnable interactive Python notebooks in
.ipynb format. Students can run them, modify them, and use them.

xxi
Author Bios

Dr. Di Wu is an Assistant Professor of Finance, Information Systems, and Economics


department of Business School, Lehman College. He obtained a Ph.D. in Computer
Science from the Graduate Center, CUNY. Dr. Wu’s research interests are 1) Temporal
extensions to RDF and semantic web, 2) Applied Data Science, and 3) Experiential
Learning and Pedagogy in business education. Dr. Wu developed and taught courses
including Strategic Management, Databases, Business Statistics, Management Decision
Making, Programming Languages (C++, Java, and Python), Data Structures and
Algorithms, Data Mining, Big Data, and Machine Learning.

xxiii
I
Data Wrangling

1
CHAPTER 1

Data Collection

D ata collection is a crucial step in the process of obtaining valuable insights


and making informed decisions. In today’s interconnected world, data can be
found in a multitude of sources, ranging from traditional files such as .csv, .html,
.txt, .xlsx, .html, and .json, to databases powered by SQL, websites hosting relevant
information, and APIs (Application Programming Interfaces) offered by companies.
To efficiently gather data from these diverse sources, various tools can be employed.
These tools encompass an array of technologies, including web scraping frameworks,
database connectors, data extraction libraries, and specialized APIs, all designed to
facilitate the collection and extraction of data from different sources. By leveraging
these tools, organizations can harness the power of data and gain valuable insights to
drive their decision-making processes.
Python offers a rich ecosystem of packages for data collection. Some commonly used
Python packages for data collection include: including:
• Pandas: Pandas is a powerful library for data manipulation and analysis. It
provides data structures and functions to efficiently work with structured data,
making it suitable for data collection from CSV files, Excel spreadsheets, and
SQL databases.
• BeautifulSoup: Beautiful Soup is a Python library for web scraping. It helps
parse HTML and XML documents, making it useful for extracting data from
websites.
• Requests: Requests is a versatile library for making HTTP requests. It simplifies
the process of interacting with web services and APIs, allowing data retrieval
from various sources.
• mysql-connector-python, psycopg2, and sqlite3: These libraries are Python
connectors for MySQL, PostgreSQL, and sqlite databases, respectively. They
enable data collection by establishing connections to these databases, executing
queries, and retrieving data.

DOI: 10.1201/9781003462781-1 3
4 ■ Data Mining with Python

• Yahoo Finance: The Yahoo Finance library provides an interface to access


financial data from Yahoo Finance. It allows you to fetch historical stock prices,
company information, and other financial data.
These are just a few examples of Python packages commonly used for data collection.
We will cover them in detail with tutorials and case studies. Depending on the specific
data sources and requirements, there are many more packages available to facilitate
data collection in Python.

1.1 COLLECT DATA FROM FILES

Storing data in different file formats allows for versatility and compatibility with
various applications and tools.
• CSV (Comma-Separated Values): CSV files store tabular data in plain text
format, where each line represents a row, and values are separated by commas (or
other delimiters). CSV files are simple, human-readable, and widely supported.
They can be easily opened and edited using spreadsheet software or text editors.
However, CSV files may not support complex data structures, and there is no
standardized format for metadata or data types. Pandas provides the read_csv()
function, allowing you to read CSV files into a DataFrame object effortlessly.
It automatically detects the delimiter, handles missing values, and provides
convenient methods for data manipulation and analysis.
• TXT (Plain Text): TXT files contain unformatted text with no specific structure
or metadata. TXT files are lightweight, widely supported, and can be easily
opened with any text editor. However, TXT files lack a standardized structure or
format, making it challenging to handle data that requires specific organization
or metadata. Pandas offers the read_csv() function with customizable delimiters
to read text files with structured data. By specifying the appropriate delimiter,
you can read text files into a DataFrame for further analysis.
• XLSX (Microsoft Excel): XLSX is a file format used by Microsoft Excel to
store spreadsheet data with multiple sheets, formatting, formulas, and metadata.
XLSX files support complex spreadsheets with multiple tabs, cell formatting,
and formulas. They are widely used in business and data analysis scenarios.
However, XLSX files can be large, and manipulating them directly can be
memory-intensive. Additionally, XLSX files require software like Microsoft Excel
to view and edit. Pandas provides the read_excel() function, enabling the
reading of XLSX files into DataFrames. It allows you to specify the sheet name,
range of cells, and other parameters to extract data easily.
• JSON (JavaScript Object Notation): JSON is a lightweight, human-readable
data interchange format that represents structured data as key-value pairs, lists,
and nested objects. JSON is easy to read and write, supports complex nested
structures, and is widely used for data interchange between systems. However,
JSON files can be larger than their equivalent CSV representations, and handling
Data Collection ■ 5

complex nested structures may require additional processing. Pandas provides


the read_json() function to read JSON data directly into a DataFrame. It
handles both simple and nested JSON structures, allowing for convenient data
exploration and analysis.
• XML (eXtensible Markup Language): XML files store structured data using
tags that define elements and their relationships. XML is designed to be self-
descriptive and human-readable. XML files provide a flexible and extensible
format for storing structured data. They are widely used for data interchange
and can represent complex hierarchical structures. However, XML files can be
verbose and have larger file sizes compared to other formats. Parsing XML files
can be more complex due to the nested structure and the need for specialized
parsing libraries. Pandas provides the read_xml() function to directly read XML
files into a DataFrame. It provides several options for handling different XML
structures, such as extracting data from specific tags, handling attributes, and
parsing nested elements.
• HTML (Hypertext Markup Language): HTML files are primarily used for
structuring and presenting content on the web. They consist of tags that define
the structure and formatting of the data. HTML files provide a rich structure for
representing web content and can include images, links, and other multimedia
elements. However, HTML files are designed for web display, so extracting
structured data from them can be more complex due to the presence of non-
tabular content and formatting tags. Pandas provides the read_html() function,
which can extract tabular data from HTML tables into a DataFrame.

1.1.1 Tutorial – Collect Data from Files


We may have stored data in multiple types of files, such as text, csv, excel, xml, html,
etc. We can load them into dataframes.
import pandas as pd

1.1.1.1 CSV
We have done this when we learned pandas. You can get the path of your csv file,
and feed the path to the function read_csv.

Default setting A lot cases, default setting will do the job.


df = pd.read_csv('/content/ds_salaries.csv')

df.head()

Unnamed: 0 work_year experience_level employment_type \


0 0 2020 MI FT
1 1 2020 SE FT
6 ■ Data Mining with Python

2 2 2020 SE FT
3 3 2020 MI FT
4 4 2020 SE FT

job_title salary salary_currency salary_in_usd \


0 Data Scientist 70000 EUR 79833
1 Machine Learning Scientist 260000 USD 260000
2 Big Data Engineer 85000 GBP 109024
3 Product Data Analyst 20000 USD 20000
4 Machine Learning Engineer 150000 USD 150000

employee_residence remote_ratio company_location company_size


0 DE 0 DE L
1 JP 0 JP S
2 GB 50 GB M
3 HN 0 HN S
4 US 50 US L

df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 607 entries, 0 to 606
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Unnamed: 0 607 non-null int64
1 work_year 607 non-null int64
2 experience_level 607 non-null object
3 employment_type 607 non-null object
4 job_title 607 non-null object
5 salary 607 non-null int64
6 salary_currency 607 non-null object
7 salary_in_usd 607 non-null int64
8 employee_residence 607 non-null object
9 remote_ratio 607 non-null int64
10 company_location 607 non-null object
11 company_size 607 non-null object
dtypes: int64(5), object(7)
memory usage: 57.0+ KB

Customize setting You can manipulate arguments for your specific csv file
df = pd.read_csv('/content/ds_salaries.csv', header = None)
df.head()

0 1 2 3 \
0 NaN work_year experience_level employment_type
1 0.0 2020 MI FT
2 1.0 2020 SE FT
3 2.0 2020 SE FT
4 3.0 2020 MI FT

4 5 6 7 \
Data Collection ■ 7

0 job_title salary salary_currency salary_in_usd


1 Data Scientist 70000 EUR 79833
2 Machine Learning Scientist 260000 USD 260000
3 Big Data Engineer 85000 GBP 109024
4 Product Data Analyst 20000 USD 20000

8 9 10 11
0 employee_residence remote_ratio company_location company_size
1 DE 0 DE L
2 JP 0 JP S
3 GB 50 GB M
4 HN 0 HN S

df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 608 entries, 0 to 607
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 0 607 non-null float64
1 1 608 non-null object
2 2 608 non-null object
3 3 608 non-null object
4 4 608 non-null object
5 5 608 non-null object
6 6 608 non-null object
7 7 608 non-null object
8 8 608 non-null object
9 9 608 non-null object
10 10 608 non-null object
11 11 608 non-null object
dtypes: float64(1), object(11)
memory usage: 57.1+ KB

df = pd.read_csv('/content/ds_salaries.csv', header = None, skiprows=1)


df.head()

0 1 2 3 4 5 6 7 8 9 \
0 0 2020 MI FT Data Scientist 70000 EUR 79833 DE 0
1 1 2020 SE FT Machine Learning Scientist 260000 USD 260000 JP 0
2 2 2020 SE FT Big Data Engineer 85000 GBP 109024 GB 50
3 3 2020 MI FT Product Data Analyst 20000 USD 20000 HN 0
4 4 2020 SE FT Machine Learning Engineer 150000 USD 150000 US 50

10 11
0 DE L
1 JP S
2 GB M
3 HN S
4 US L
8 ■ Data Mining with Python

df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 607 entries, 0 to 606
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 0 607 non-null int64
1 1 607 non-null int64
2 2 607 non-null object
3 3 607 non-null object
4 4 607 non-null object
5 5 607 non-null int64
6 6 607 non-null object
7 7 607 non-null int64
8 8 607 non-null object
9 9 607 non-null int64
10 10 607 non-null object
11 11 607 non-null object
dtypes: int64(5), object(7)
memory usage: 57.0+ KB

df = pd.read_csv('/content/ds_salaries.csv', header = None,


skiprows=1, skipfooter=300)
df.head()

0 1 2 3 4 5 6 7 8 9 \
0 0 2020 MI FT Data Scientist 70000 EUR 79833 DE 0
1 1 2020 SE FT Machine Learning Scientist 260000 USD 260000 JP 0
2 2 2020 SE FT Big Data Engineer 85000 GBP 109024 GB 50
3 3 2020 MI FT Product Data Analyst 20000 USD 20000 HN 0
4 4 2020 SE FT Machine Learning Engineer 150000 USD 150000 US 50

10 11
0 DE L
1 JP S
2 GB M
3 HN S
4 US L

df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 307 entries, 0 to 306
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 0 307 non-null int64
1 1 307 non-null int64
2 2 307 non-null object
3 3 307 non-null object
4 4 307 non-null object
5 5 307 non-null int64
6 6 307 non-null object
Data Collection ■ 9

7 7 307 non-null int64


8 8 307 non-null object
9 9 307 non-null int64
10 10 307 non-null object
11 11 307 non-null object
dtypes: int64(5), object(7)
memory usage: 28.9+ KB

1.1.1.2 TXT
If the txt follows csv format, then it can be read as a csv file
df = pd.read_csv('/content/ds_salaries.txt')
df

Unnamed: 0 work_year experience_level employment_type \


0 0 2020 MI FT
1 1 2020 SE FT
2 2 2020 SE FT
3 3 2020 MI FT
4 4 2020 SE FT
.. ... ... ... ...
602 602 2022 SE FT
603 603 2022 SE FT
604 604 2022 SE FT
605 605 2022 SE FT
606 606 2022 MI FT

job_title salary salary_currency salary_in_usd \


0 Data Scientist 70000 EUR 79833
1 Machine Learning Scientist 260000 USD 260000
2 Big Data Engineer 85000 GBP 109024
3 Product Data Analyst 20000 USD 20000
4 Machine Learning Engineer 150000 USD 150000
.. ... ... ... ...
602 Data Engineer 154000 USD 154000
603 Data Engineer 126000 USD 126000
604 Data Analyst 129000 USD 129000
605 Data Analyst 150000 USD 150000
606 AI Scientist 200000 USD 200000

employee_residence remote_ratio company_location company_size


0 DE 0 DE L
1 JP 0 JP S
2 GB 50 GB M
3 HN 0 HN S
4 US 50 US L
.. ... ... ... ...
602 US 100 US M
603 US 100 US M
604 US 0 US M
605 US 100 US M
606 IN 100 US L

[607 rows x 12 columns]


10 ■ Data Mining with Python

1.1.1.3 Excel
df = pd.read_excel('/content/ds_salaries.xlsx')

df.head()

Unnamed: 0 work_year experience_level employment_type \


0 0 2020 MI FT
1 1 2020 SE FT
2 2 2020 SE FT
3 3 2020 MI FT
4 4 2020 SE FT

job_title salary salary_currency salary_in_usd \


0 Data Scientist 70000 EUR 79833
1 Machine Learning Scientist 260000 USD 260000
2 Big Data Engineer 85000 GBP 109024
3 Product Data Analyst 20000 USD 20000
4 Machine Learning Engineer 150000 USD 150000

employee_residence remote_ratio company_location company_size


0 DE 0 DE L
1 JP 0 JP S
2 GB 50 GB M
3 HN 0 HN S
4 US 50 US L

df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 607 entries, 0 to 606
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Unnamed: 0 607 non-null int64
1 work_year 607 non-null int64
2 experience_level 607 non-null object
3 employment_type 607 non-null object
4 job_title 607 non-null object
5 salary 607 non-null int64
6 salary_currency 607 non-null object
7 salary_in_usd 607 non-null int64
8 employee_residence 607 non-null object
9 remote_ratio 607 non-null int64
10 company_location 607 non-null object
11 company_size 607 non-null object
dtypes: int64(5), object(7)
memory usage: 57.0+ KB
Data Collection ■ 11

1.1.1.4 json

df = pd.read_json('/content/ds_salaries.json')
df.head()

FIELD1 work_year experience_level employment_type \


0 0 2020 MI FT
1 1 2020 SE FT
2 2 2020 SE FT
3 3 2020 MI FT
4 4 2020 SE FT

job_title salary salary_currency salary_in_usd \


0 Data Scientist 70000 EUR 79833
1 Machine Learning Scientist 260000 USD 260000
2 Big Data Engineer 85000 GBP 109024
3 Product Data Analyst 20000 USD 20000
4 Machine Learning Engineer 150000 USD 150000

employee_residence remote_ratio company_location company_size


0 DE 0 DE L
1 JP 0 JP S
2 GB 50 GB M
3 HN 0 HN S
4 US 50 US L

df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 607 entries, 0 to 606
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 FIELD1 607 non-null int64
1 work_year 607 non-null int64
2 experience_level 607 non-null object
3 employment_type 607 non-null object
4 job_title 607 non-null object
5 salary 607 non-null int64
6 salary_currency 607 non-null object
7 salary_in_usd 607 non-null int64
8 employee_residence 607 non-null object
9 remote_ratio 607 non-null int64
10 company_location 607 non-null object
11 company_size 607 non-null object
dtypes: int64(5), object(7)
memory usage: 57.0+ KB
12 ■ Data Mining with Python

1.1.1.5 XML
df = pd.read_xml('/content/ds_salaries.xml')
df.head()

FIELD1 work_year experience_level employment_type \


0 0 2020 MI FT
1 1 2020 SE FT
2 2 2020 SE FT
3 3 2020 MI FT
4 4 2020 SE FT

job_title salary salary_currency salary_in_usd \


0 Data Scientist 70000 EUR 79833
1 Machine Learning Scientist 260000 USD 260000
2 Big Data Engineer 85000 GBP 109024
3 Product Data Analyst 20000 USD 20000
4 Machine Learning Engineer 150000 USD 150000

employee_residence remote_ratio company_location company_size


0 DE 0 DE L
1 JP 0 JP S
2 GB 50 GB M
3 HN 0 HN S
4 US 50 US L

df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 607 entries, 0 to 606
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 FIELD1 607 non-null int64
1 work_year 607 non-null int64
2 experience_level 607 non-null object
3 employment_type 607 non-null object
4 job_title 607 non-null object
5 salary 607 non-null int64
6 salary_currency 607 non-null object
7 salary_in_usd 607 non-null int64
8 employee_residence 607 non-null object
9 remote_ratio 607 non-null int64
10 company_location 607 non-null object
11 company_size 607 non-null object
dtypes: int64(5), object(7)
memory usage: 57.0+ KB
Data Collection ■ 13

1.1.1.6 HTM
df = pd.read_html('/content/ds_salaries.htm')[0]
df.head()

FIELD1 work_year experience_level employment_type \


0 0 2020 MI FT
1 1 2020 SE FT
2 2 2020 SE FT
3 3 2020 MI FT
4 4 2020 SE FT

job_title salary salary_currency salary_in_usd \


0 Data Scientist 70000 EUR 79833
1 Machine Learning Scientist 260000 USD 260000
2 Big Data Engineer 85000 GBP 109024
3 Product Data Analyst 20000 USD 20000
4 Machine Learning Engineer 150000 USD 150000

employee_residence remote_ratio company_location company_size


0 DE 0 DE L
1 JP 0 JP S
2 GB 50 GB M
3 HN 0 HN S
4 US 50 US L

df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 607 entries, 0 to 606
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 FIELD1 607 non-null int64
1 work_year 607 non-null int64
2 experience_level 607 non-null object
3 employment_type 607 non-null object
4 job_title 607 non-null object
5 salary 607 non-null int64
6 salary_currency 607 non-null object
7 salary_in_usd 607 non-null int64
8 employee_residence 607 non-null object
9 remote_ratio 607 non-null int64
10 company_location 607 non-null object
11 company_size 607 non-null object
dtypes: int64(5), object(7)
memory usage: 57.0+ KB

1.1.2 Documentation
It is always good to have a reference of the read files functions in pandas. You can
find it via https://pandas.pydata.org/docs/reference/io.html
14 ■ Data Mining with Python

1.2 COLLECT DATA FROM THE WEB

Collecting data from the web is essential for various reasons:


• Access to vast amounts of information: The web contains an immense amount
of data on diverse topics. By collecting data from the web, you can tap into
this vast information pool and gain insights that can inform decision-making,
research, analysis, and more.
• Real-time and up-to-date data: The web provides a platform for the dissemina-
tion of real-time and up-to-date information. By collecting data from the web,
you can stay informed about the latest news, trends, market updates, social
media activity, and other dynamic sources of information.
• Competitive intelligence: Collecting data from the web allows you to monitor
your competitors, track their activities, analyze their strategies, and gain insights
into the market landscape. This can help you make informed decisions and stay
ahead in a competitive environment.
• Research and analysis: Web data collection is crucial for research, analysis,
and data-driven insights. By collecting data from diverse sources, you can
validate hypotheses, perform statistical analysis, conduct sentiment analysis,
and uncover patterns or trends that can enhance understanding and drive
informed decision-making.
The web has many websites, including structured websites, semi-structured websites,
and unstructured websites, that differ in terms of their organization and consistency.
• Structured Websites: Structured websites have a well-defined and organized
format, making it easy to locate specific information. They often follow a
consistent layout and have clearly defined sections. Structured websites generally
pose fewer challenges for data collection as the information is neatly organized.
However, occasional variations in page layouts or changes in website structure
can introduce some level of complexity. To collect data from structured websites,
you can utilize libraries like Beautiful Soup or lxml in Python. These libraries
enable you to parse the HTML structure of the web pages and extract desired
data using specific tags or CSS selectors.
• Semi-Structured Websites: Semi-structured websites contain a mixture of struc-
tured and unstructured data. While certain sections might be organized, others
may have varying formats or lack consistent organization. The main challenge
with semi-structured websites is the inconsistency in data presentation. The lack
of uniformity in structure and formatting requires additional effort to identify
and extract the relevant data. Similar to structured websites, libraries like
Beautiful Soup or lxml can help parse and extract data from semi-structured
websites. However, you may need to employ additional techniques such as
regular expressions or data cleaning procedures to handle variations in data
presentation.
Data Collection ■ 15

• Unstructured Websites: Unstructured websites lack a clear organization or


predefined structure. They may have free-form text, multimedia content, and
unorganized data scattered across multiple pages. Unstructured websites pose
the most significant challenges for data collection due to the absence of consis-
tent structure. The data may be embedded within paragraphs, images, or other
non-tabular formats, requiring sophisticated techniques for extraction. For un-
structured websites, natural language processing (NLP) techniques and machine
learning algorithms can be employed to extract relevant information. These
methods involve parsing the web content, identifying patterns, and applying
text processing algorithms to extract structured data.
In summary, structured websites provide a clear structure, making data collection rel-
atively straightforward. Semi-structured websites introduce some variability, requiring
careful handling of inconsistencies. Unstructured websites present the most significant
challenges, necessitating advanced techniques such as NLP and machine learning to
extract structured information. Python libraries like Beautiful Soup, lxml, and NLP
frameworks can assist in parsing and extracting data from these different types of
websites, adapting to their specific characteristics and complexities.

1.2.1 Tutorial – Collect Data from Web


import pandas as pd

1.2.1.1 Wiki
Some websites maintains structured data, which is easy to read
table = pd.read_html('https://en.wikipedia.org/wiki/
List_of_countries_by_GDP_(nominal)#Table')

for i in table:
print(type(i))

<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>

for i in table:
print(i.columns)

Int64Index([0], dtype='int64')
Int64Index([0, 1, 2], dtype='int64')
MultiIndex([( 'Country/Territory', 'Country/Territory'),
( 'UN Region', 'UN Region'),
16 ■ Data Mining with Python

( 'IMF[1][13]', 'Estimate'),
( 'IMF[1][13]', 'Year'),
( 'World Bank[14]', 'Estimate'),
( 'World Bank[14]', 'Year'),
('United Nations[15]', 'Estimate'),
('United Nations[15]', 'Year')],
)
...
Int64Index([0, 1], dtype='int64')

df = table[2]
df.head()

Country/Territory UN Region IMF[1][13] World Bank[14] \


Country/Territory UN Region Estimate Year Estimate Year
0 World — 101560901 2022 96513077 2021
1 United States Americas 25035164 2022 22996100 2021
2 China Asia 18321197 [n 1]2022 17734063 [n 3]2021
3 Japan Asia 4300621 2022 4937422 2021
4 Germany Europe 4031149 2022 4223116 2021

United Nations[15]
Estimate Year
0 85328323 2020
1 20893746 2020
2 14722801 [n 1]2020
3 5057759 2020
4 3846414 2020

df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 217 entries, 0 to 216
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 (Country/Territory, Country/Territory) 217 non-null object
1 (UN Region, UN Region) 217 non-null object
2 (IMF[1][13], Estimate) 217 non-null object
3 (IMF[1][13], Year) 217 non-null object
4 (World Bank[14], Estimate) 217 non-null object
5 (World Bank[14], Year) 217 non-null object
6 (United Nations[15], Estimate) 217 non-null object
7 (United Nations[15], Year) 217 non-null object
dtypes: object(8)
memory usage: 13.7+ KB

1.2.1.2 Web Scraping


Some websites are semi-structured, which has metadata, such as labels, classes, etc,
so we can look into their source code, and do web scraping.
Note: You need to have a basic understanding of html, xml, in order to
understand the source code and collect data from these websites.
Data Collection ■ 17

Note: Some websites prevent users from scraping or scraping rapidly.


The first thing we’ll need to do to scrape a web page is to download the page. We can
download pages using the Python requests library.
The requests library will make a GET request to a web server, which will download
the HTML contents of a given web page for us. There are several different types of
requests we can make using requests, of which GET is just one. If you want to learn
more, check out our API tutorial.
Let’s try downloading a simple sample website, https://dataquestio.github.io/web-
scraping-pages/simple.html.

Download by requests We’ll need to first import the requests library, and then
download the page using the requests.get method:
import requests

page = requests.get("https://dataquestio.github.io/
web-scraping-pages/simple.html")
page

<Response [200]>

After running our request, we get a Response object. This object has a status_code
property, which indicates if the page was downloaded successfully:
page.status_code

200

A status_code of 200 means that the page downloaded successfully. We won’t fully
dive into status codes here, but a status code starting with a 2 generally indicates
success, and a code starting with a 4 or a 5 indicates an error.
We can print out the HTML content of the page using the content property:
page.content

b'<!DOCTYPE html>\n<html>\n <head>\n <title>A simple example


page</title>\n </head>\n <body>\n <p>Here is some
simple content for this page.</p>\n </body>\n</html>'

Parsing by BeautifulSoup As you can see above, we now have downloaded an HTML
document.
We can use the BeautifulSoup library to parse this document, and extract the text
from the p tag.
18 ■ Data Mining with Python

from bs4 import BeautifulSoup


soup = BeautifulSoup(page.content, 'html.parser')

We can now print out the HTML content of the page, formatted nicely, using the
prettify method on the BeautifulSoup object.
print(soup.prettify())

<!DOCTYPE html>
<html>
<head>
<title>
A simple example page
</title>
</head>
<body>
<p>
Here is some simple content for this page.
</p>
</body>
</html>

This step isn’t strictly necessary, and we won’t always bother with it, but it can be
helpful to look at prettified HTML to make the structure of the and where tags are
nested easier to see.

Finding Tags Finding all instances of a tag at once What we did above was useful for
figuring out how to navigate a page, but it took a lot of commands to do something
fairly simple. If we want to extract a single tag, we can instead use the find_all
method, which will find all the instances of a tag on a page.
if we are looking for the title, we can look for <title> tag
soup.find_all('title')

[<title>A simple example page</title>]

for t in soup.find_all('title'):
print(t.get_text())

A simple example page

If we are looking for text, we can look for <p> tag


for t in soup.find_all('p'):
print(t.get_text())

Here is some simple content for this page.


Data Collection ■ 19

If you instead only want to find the first instance of a tag, you can use the find method,
which will return a single BeautifulSoup object:
soup.find('p').get_text()

{"type":"string"}

Searching for tags by class and id:


Classes and ids are used by CSS to determine which HTML elements to apply certain
styles to. But when we’re scraping, we can also use them to specify the elements we
want to scrape.
Let’s try another page.
page = requests.get("https://dataquestio.github.io/
web-scraping-pages/ids_and_classes.html")
soup = BeautifulSoup(page.content, 'html.parser')
soup

<html>
<head>
<title>A simple example page</title>
</head>
<body>
<div>
<p class="inner-text first-item" id="first">
First paragraph.
</p>
<p class="inner-text">
Second paragraph.
</p>
</div>
<p class="outer-text first-item" id="second">
<b>
First outer paragraph.
</b>
</p>
<p class="outer-text">
<b>
Second outer paragraph.
</b>
</p>
</body>
</html>

Now, we can use the find_all method to search for items by class or by id. In the
below example, we’ll search for any p tag that has the class outer-text:
soup.find_all('p', class_='outer-text')

[<p class="outer-text first-item" id="second">


<b>
20 ■ Data Mining with Python

First outer paragraph.


</b>
</p>, <p class="outer-text">
<b>
Second outer paragraph.
</b>
</p>]

In the below example, we’ll look for any tag that has the class outer-text:
soup.find_all(class_="outer-text")

[<p class="outer-text first-item" id="second">


<b>
First outer paragraph.
</b>
</p>, <p class="outer-text">
<b>
Second outer paragraph.
</b>
</p>]

We can also search for elements by id:


soup.find_all(id="first")

[<p class="inner-text first-item" id="first">


First paragraph.
</p>]

1.2.2 Case Study – Collect Weather Data from Web


1.2.2.1 Downloading Weather Data
We now know enough to proceed with extracting information about the local weather
from the National Weather Service website!
The local weather of Boulder, CO is: https://forecast.weather.gov/MapClick.php?la
t=40.0466&lon=-105.2523#.YwpRBy2B1f0
Time to Start Scraping!
We now know enough to download the page and start parsing it. In the below code,
we will:
• Download the web page containing the forecast.
• Create a BeautifulSoup class to parse the page.
• Find the div with id seven-day-forecast, and assign to seven_day
• Inside seven_day, find each individual forecast item. Extract and print the first
forecast item.
Data Collection ■ 21

import requests
from bs4 import BeautifulSoup

page = requests.get("https://forecast.weather.gov/
MapClick.php?lat=40.0466&lon=-105.2523#.YwpRBy2B1f0")
soup = BeautifulSoup(page.content, 'html.parser')
seven_day = soup.find(id="seven-day-forecast")
forecast_items = seven_day.find_all(class_="tombstone-container")
print(forecast_items)

[<div class="tombstone-container">
<p class="period-name">Today<br/><br/></p>
<p><img alt="Today: Sunny...>
<p class="period-name">Tonight<br/><br/></p>
<p><img alt="Tonight: Mostly clear...>
...

tonight = forecast_items[0]
print(tonight.prettify())

<div class="tombstone-container">
<p class="period-name">
Today
<br/>
<br/>
</p>
<p>
<img alt="Today: Sunny, with a high near 88.
Northwest wind 9 to 13 mph,
with gusts as high as 21 mph. "
class="forecast-icon" src="newimages/medium/few.png"
title="Today: Sunny, with a high near 88.
Northwest wind 9 to 13 mph,
with gusts as high as 21 mph. "/>
</p>
<p class="short-desc">
Sunny
</p>
<p class="temp temp-high">
High: 88 °F
</p>
</div>

1.2.2.2 Extracting Information of Tonight


As we can see, inside the forecast item tonight is all the information we want. There
are four pieces of information we can extract:
• The name of the forecast item – in this case, Tonight.
• The description of the conditions – this is stored in the title property of img.
• A short description of the conditions – in this case, Sunny and hot.
• The temperature hight – in this case, 98 degrees.
22 ■ Data Mining with Python

We’ll extract the name of the forecast item, the short description, and the temperature
first, since they’re all similar:
period = tonight.find(class_="period-name").get_text()
short_desc = tonight.find(class_="short-desc").get_text()
temp = tonight.find(class_="temp").get_text()
print(period)
print(short_desc)
print(temp)

Today
Sunny
High: 88 °F

Now, we can extract the title attribute from the img tag. To do this, we just treat the
BeautifulSoup object like a dictionary, and pass in the attribute we want as a key:
img = tonight.find("img")
desc = img['title']
print(desc)

Today: Sunny,
with a high near 88.
Northwest wind 9 to 13 mph,
with gusts as high as 21 mph.

1.2.2.3 Extract all Nights!


Now that we know how to extract each individual piece of information, we can combine
our knowledge with CSS selectors and list comprehensions to extract everything at
once.
In the below code, we will:
Select all items with the class period-name inside an item with the class tombstone-
container in seven_day. Use a list comprehension to call the get_text method on each
BeautifulSoup object.
period_tags = seven_day.select(".tombstone-container .period-name")
periods = [pt.get_text() for pt in period_tags]
periods

['Today',
'Tonight',
'Sunday',
'SundayNight',
'Monday',
'MondayNight',
'Tuesday',
'TuesdayNight',
'Wednesday']
Data Collection ■ 23

As we can see above, our technique gets us each of the period names, in order.
We can apply the same technique to get the other three fields:
short_descs = [sd.get_text() for sd in seven_day.select(
".tombstone-container .short-desc")]
temps = [t.get_text() for t in seven_day.select(
".tombstone-container .temp")]
descs = [d["title"] for d in seven_day.select(
".tombstone-container img")]

print(short_descs)
print(temps)
print(descs)

['Sunny', 'Mostly Clear', 'Sunny thenSlight ChanceT-storms',...]


['High: 88 °F', 'Low: 59 °F', 'High: 88 °F', 'Low: 57 °F', ...]
['Today: Sunny, with a high near 88. Northwest wind 9 to 13 mph...]

1.2.2.4 Deal with Data


We can now combine the data into a Pandas DataFrame and analyze it. A DataFrame
is an object that can store tabular data, making data analysis easy.
In order to do this, we’ll call the DataFrame class, and pass in each list of items that
we have. We pass them in as part of a dictionary.
Each dictionary key will become a column in the DataFrame, and each list will become
the values in the column:
import pandas as pd
weather = pd.DataFrame({
"period": periods,
"short_desc": short_descs,
"temp": temps,
"desc":descs
})
weather

Now let’s save it to CSV.


weather.to_csv('data/Boulder_Weather_7_Days.csv')

1.3 COLLECT DATA FROM SQL DATABASES

Storing data in SQL databases offers several advantages and considerations. The
advantages are:
• Advantages of Storing Data in SQL Databases: Structured Storage: SQL
databases provide a structured storage model with tables, rows, and columns,
allowing for efficient organization and retrieval of data.
24 ■ Data Mining with Python

• Data Integrity and Consistency: SQL databases enforce data integrity through
constraints, such as primary keys, unique keys, and referential integrity, ensuring
the accuracy and consistency of the stored data.
• Querying and Analysis: SQL databases offer powerful query languages (e.g.,
SQL) that enable complex data retrieval, filtering, aggregations, and analysis
operations.
• ACID Compliance: SQL databases adhere to ACID (Atomicity, Consistency,
Isolation, Durability) properties, ensuring reliable and transactional data opera-
tions.
To collect data from a SQL database, you need to establish a connection to the database
server. This typically involves providing connection details such as server address,
port, username, and password. Once connected, you can use SQL queries to extract
data from the database. Queries can range from simple retrieval of specific records to
complex joins, aggregations, and filtering operations. Python provides several libraries
for interacting with SQL databases, such as sqlite3, psycopg2, pymysql, and pyodbc.
These libraries allow you to establish connections, execute SQL queries, and retrieve
the query results into Python data structures for further processing.

1.3.1 Tutorial – Collect Data from SQLite


1.3.1.1 What is SQLite
A file with the .sqlite extension is a lightweight SQL database file created with
the SQLite software. It is a database in a file itself and implements a self-contained,
full-featured, highly-reliable SQL database engine.
We use SQLite to demonstrate the approach to access SQL databases. They follow
similar steps. You just need to setup your account credentials in the connect so you
can connect the server.

1.3.1.2 Read an SQLite Database in Python


We use a Python package, sqlite3, to deal with SQLite databases. Once the sqlite3
package is imported, the general steps are:
1. Create a connection object that connects the SQLite database.
2. Create a cursor object
3. Create a query statement
4. Execute the query statement
5. Fetch the query result to result
6. If all work is done, close the connection.
We use the built-in SQLite database Chinook as the example here. We connect with
the database, and show all the tables it contains.
Data Collection ■ 25

import sqlite3

connection = sqlite3.connect('/content/ds_salaries.sqlite')
cursor = connection.cursor()

query = '''
SELECT name FROM sqlite_master
WHERE type='table';
'''

cursor.execute(query)
results = cursor.fetchall()
results

[('ds_salaries',)]

1.3.1.3 Play with the SQLite Databases


Using SQL statements, you can play with the SQLite Databases and get the data you
need.
query = '''SELECT *
FROM ds_salaries'''

cursor.execute(query)
results = cursor.fetchall()
results

[(None,
'work_year',
'experience_level',
'employment_type',
'job_title',
'salary',
'salary_currency',
'salary_in_usd',
'employee_residence',
'remote_ratio',
'company_location',
'company_size'),
(0,
'2020',
'MI',
'FT',
'Data Scientist',
'70000',
'EUR',
'79833',
'DE',
'0',
'DE',
'L'),
Discovering Diverse Content Through
Random Scribd Documents
—Adieu, maman.
Il y eut une longue embrassade, puis un employé ferma les portières et le
train se mit en route.
Ils étaient seuls. L’abbé, ravi, se félicitait de son adresse, et il se mit à
causer avec les jeunes gens qui lui étaient confiés. Il avait été convenu, le
jour de son départ, que Mᵐᵉ de Martinsec l’autoriserait à donner des
répétitions pendant toutes les vacances à ces trois garçons, et il voulait
sonder un peu l’intelligence et le caractère de ses nouveaux élèves.
Roger de Sarcagnes, le plus grand, était un de ces hauts collégiens
poussés trop vite, maigres et pâles, et dont les articulations ne semblent pas
tout à fait soudées. Il parlait lentement, d’une façon naïve.
Gontran de Vaulacelles, au contraire, demeurait tout petit, trapu, et il
était malin, sournois, mauvais et drôle. Il se moquait toujours de tout le
monde, avait des mots de grande personne, des répliques à double sens qui
inquiétaient ses parents.
Le plus jeune, Roland de Bridoie, ne paraissait montrer aucune aptitude
pour rien; C’était une bonne petite bête qui ressemblerait à son papa.
L’abbé les avait prévenus qu’ils seraient sous ses ordres pendant ces
deux mois d’été; et il leur fit un sermon bien senti sur leurs devoirs envers
lui, sur la façon dont il entendait les gouverner, sur la méthode qu’il
emploierait envers eux.
C’était un abbé d’âme droite et simple, un peu phraseur et plein de
systèmes.
Son discours fut interrompu par un profond soupir que poussa leur
voisine. Il tourna la tête vers elle. Elle demeurait assise dans son coin, les
yeux fixes, les joues un peu pâles. L’abbé revint à ses disciples.
Le train roulait à toute vitesse, traversait des plaines, des bois, passait
sous des ponts et sur des ponts, secouait de sa trépidation frémissante le
chapelet de voyageurs enfermés dans les wagons.
Gontran de Vaulacelles, maintenant, interrogeait l’abbé Lecuir sur Royat,
sur les amusements du pays. Y avait-il une rivière? Pouvait-on pêcher?
Aurait-il un cheval, comme l’autre année? etc.
La jeune femme, tout à coup, jeta une sorte de cri, un «ah!» de
souffrance vite réprimé.
Le prêtre, inquiet, lui demanda:
—Vous sentez-vous indisposée, madame?
Elle répondit:
—Non, non, monsieur l’abbé, ce n’est rien, une légère douleur, ce n’est
rien. Je suis un peu malade depuis quelque temps, et le mouvement du train
me fatigue. Sa figure était devenue livide, en effet.
Il insista:
—Si je puis quelque chose pour vous, madame?...
—Oh! non, rien du tout,—monsieur l’abbé. Je vous remercie.
Le prêtre reprit sa causerie avec ses élèves les préparant à son
enseignement et à sa direction.
Les heures passaient. Le convoi s’arrêtait de temps en temps, puis
repartait. La jeune femme, maintenant, paraissait dormir et elle ne bougeait
plus, enfoncée en son coin. Bien que le jour fût plus qu’à moitié écoulé, elle
n’avait encore rien mangé. L’abbé pensait: «Cette personne doit être bien
souffrante».
Il ne restait plus que deux heures de route pour atteindre Clermont-
Ferrand, quand la voyageuse se mit brusquement à gémir. Elle s’était laissée
presque tomber de sa banquette et, appuyée sur les mains, les yeux hagards,
les traits crispés, elle répétait: «Oh! mon Dieu! oh! mon Dieu!»
L’abbé s’élança:
—Madame... madame... madame, qu’avez-vous?
Elle balbutia:
—Je... je... crois que... que... que je vais accoucher. Et elle commença
aussitôt à crier d’une effroyable façon. Elle poussait une longue clameur
affolée qui semblait déchirer sa gorge au passage, une clameur aiguë,
affreuse, dont l’intonation sinistre disait l’angoisse de son âme et la torture
de son corps.
Le pauvre prêtre éperdu, debout devant elle, ne savait que faire, que dire,
que tenter, et il murmurait: «Mon Dieu, si je savais... Mon Dieu, si je
savais!» Il était rouge jusqu’au blanc des yeux; et ses trois élèves
regardaient avec stupeur cette femme étendue qui criait.
Tout à coup, elle se tordit, élevant ses bras sur sa tête, et son flanc eut
une secousse étrange, une convulsion qui la parcourut.
L’abbé pensa qu’elle allait mourir, mourir devant lui, privée de secours
et de soins par sa faute. Alors il dit d’une voix résolue:
—Je vais vous aider, madame. Je ne sais pas... mais je vous aiderai
comme je pourrai. Je dois mon assistance à toute créature qui souffre.
Puis, s’étant retourné vers les trois gamins, il cria:
—Vous, vous allez passer vos têtes à la portière; et si l’un de vous se
retourne il me copiera mille vers de Virgile.
Il abaissa lui-même les trois glaces, y plaça les trois têtes, ramena contre
le cou les rideaux bleus, et il répéta:
—Si vous faites seulement un mouvement, vous serez privés
d’excursions pendant toutes les vacances. Et n’oubliez point que je ne
pardonne jamais, moi.
Et il revint vers la jeune femme, en relevant les manches de sa soutane.

Elle gémissait toujours, et, par moments, hurlait. L’abbé, la face


cramoisie, l’assistait, l’exhortait, la réconfortait, et, sans cesse, il levait les
yeux vers les trois gamins qui coulaient des regards furtifs, vite détournés,
vers la mystérieuse besogne accomplie par leur nouveau précepteur.
—M. de Vaulacelles, vous me copierez vingt fois le verbe «désobéir!»—
criait-il.
—M. de Bridoie, vous serez privé de dessert pendant un mois.
Soudain la jeune femme cessa sa plainte persistante, et presque aussitôt
un cri bizarre et léger qui ressemblait à un aboiement et à un miaulement fit
retourner, d’un seul élan, les trois collégiens persuadés qu’ils venaient
d’entendre un chien nouveau-né.
L’abbé tenait dans ses mains un petit enfant tout nu. Il le regardait avec
des yeux effarés; il semblait content et désolé, prêt à rire et prêt à pleurer;
on l’aurait cru fou, tant sa figure exprimait de choses par le jeu rapide des
yeux, des lèvres et des joues.
Il déclara, comme s’il eût annoncé à ses élèves une grande nouvelle:
—C’est un garçon.
Puis aussitôt il reprit:
—M. de Sarcagnes, passez-moi la bouteille d’eau qui est dans le filet.—
Bien.—Débouchez-la.—Très bien.—Versez-m’en quelques gouttes dans la
main, seulement quelques gouttes.—Parfait.
Et il répandit cette eau sur le front nu du petit être qu’il portait, en
prononçant:
«Je te baptise, au nom du Père, du Fils et du Saint-Esprit. Ainsi soit-il.»
Le train entrait en gare de Clermont. La figure de Mᵐᵉ de Bridoie apparut
à la portière. Alors l’abbé, perdant la tête, lui présenta la frêle bête humaine
qu’il venait de cueillir, en murmurant:
—C’est madame qui vient d’avoir un petit accident en route.
Il avait l’air d’avoir ramassé cet enfant dans un égout; et, les cheveux
mouillés de sueur, le rabat sur l’épaule, la robe maculée, il répétait:
—Ils n’ont rien vu—rien du tout,—j’en réponds.—Ils regardaient tous
trois par la portière.—J’en réponds,—ils n’ont rien vu.»
Et il descendit du compartiment avec quatre garçons au lieu de trois qu’il
était allé chercher, tandis que Mᵐᵉˢ de Bridoie, de Vaulacelles et de
Sarcagnes, livides, échangeaient des regards éperdus, sans trouver un seul
mot à dire.

Le soir, les trois familles dînaient ensemble pour fêter l’arrivée des
collégiens. Mais on ne parlait guère; les pères, les mères et les enfants eux-
mêmes semblaient préoccupés.
Tout à coup, le plus jeune, Roland de Bridoie, demanda:
—Dis, maman, où l’abbé l’a-t-il trouvé ce petit garçon?
La mère ne répondit pas directement.
—Allons, dîne, et laisse-nous tranquilles avec tes questions.
Il se tut quelques minutes, puis reprit:
—Il n’y avait personne que cette dame qui avait mal au ventre. C’est
donc que l’abbé est prestidigitateur, comme Robert Houdin qui fait venir un
bocal de poissons sous un tapis.
—Tais-toi, voyons. C’est le bon Dieu qui l’a envoyé.
—Mais où l’avait-il mis le bon Dieu? Je n’ai rien vu, moi. Est-il entré
par la portière, dis?
Mᵐᵉ de Bridoie, impatientée, répliqua:
—Voyons, c’est fini, tais-toi. Il est venu sous un chou comme tous les
petits enfants. Tu le sais bien.
—Mais il n’y avait pas de chou dans le wagon?
Alors Gontran de Vaulacelles, qui écoutait avec un air sournois, sourit et
dit:
—Si, il y avait un chou. Mais il n’y a que Monsieur l’abbé qui l’a vu.
En Wagon a paru dans le Gil-Blas du mardi 24 mars 1885.
ÇA IRA.
J’étais descendu à Barviller uniquement parce que j’avais lu dans un
guide (je ne sais plus lequel): Beau musée, deux Rubens, un Téniers, un
Ribera.
Donc je pensais: Allons voir ça. Je dînerai à l’hôtel de l’Europe, que le
guide affirme excellent, et je repartirai le lendemain.
Le musée était fermé: on ne l’ouvre que sur la demande des voyageurs; il
fut donc ouvert à ma requête, et je pus contempler quelques croûtes
attribuées par un conservateur fantaisiste aux premiers maîtres de la
peinture.
Puis je me trouvai tout seul, et n’ayant absolument rien à faire, dans une
longue rue de petite ville inconnue, bâtie au milieu de plaines interminables,
je parcourus cette artère, j’examinai quelques pauvres magasins; puis,
comme il était quatre heures, je fus saisi par un de ces découragements qui
rendent fous les plus énergiques.
Que faire? Mon Dieu, que faire? J’aurais payé cinq cents francs l’idée
d’une distraction quelconque? Me trouvant à sec d’inventions, je me
décidai, tout simplement, à fumer un bon cigare et je cherchai le bureau de
tabac. Je le reconnus bientôt à sa lanterne rouge, j’entrai. La marchande me
tendit plusieurs boîtes au choix; ayant regardé les cigares, que je jugeai
détestables, je considérai, par hasard, la patronne.
C’était une femme de quarante-cinq ans environ, forte et grisonnante.
Elle avait une figure grasse, respectable, en qui il me sembla trouver
quelque chose de familier. Pourtant je ne connaissais point cette dame! Non,
je ne la connaissais pas assurément! Mais ne se pouvait-il faire que je
l’eusse rencontrée? Oui, c’était possible! Ce visage-là devait être une
connaissance de mon œil, une vieille connaissance perdue de vue, et
changée, engraissée énormément sans doute.
Je murmurai:
—Excusez-moi, madame, de vous examiner ainsi, mais il me semble que
je vous connais depuis longtemps.
Elle répondit en rougissant:
—C’est drôle... Moi aussi.
Je poussai un cri:
—Ah? Ça ira!
Elle leva ses deux mains avec un désespoir comique, épouvantée de ce
mot et balbutiant:
—Oh! oh! Si on vous entendait...
Puis soudain elle s’écria à son tour:
—Tiens, c’est toi, Georges!
Puis elle regarda avec frayeur si on ne l’avait point écoutée. Mais nous
étions seuls, bien seuls!
«Ça ira.» Comment avais-je pu reconnaître «Ça ira», la pauvre Ça ira, la
maigre Ça ira! la désolée Ça ira, dans cette tranquille et grasse
fonctionnaire du gouvernement?
Ça ira! Que de souvenirs s’éveillèrent brusquement en moi: Bougival,
La Grenouillère, Chatou, le restaurant Fournaise, les longues journées en
yole au bord des berges, dix ans de ma vie passés dans ce coin de pays, sur
ce délicieux bout de rivière.
Nous étions alors une bande d’une douzaine, habitant la maison
Galopois, à Chatou, et vivant là d’une drôle de façon, toujours à moitié nus
et à moitié gris. Les mœurs des canotiers d’aujourd’hui ont bien changé.
Ces messieurs portent des monocles.
Or notre bande possédait une vingtaine de canotières, régulières et
irrégulières. Dans certains dimanches, nous en avions quatre; dans certains
autres, nous les avions toutes. Quelques-unes étaient là, pour ainsi dire, à
demeure, les autres venaient quand elles n’avaient rien de mieux à faire.
Cinq ou six vivaient sur le commun, sur les hommes sans femmes, et, parmi
celles-là, Ça ira.
C’était une pauvre fille maigre et qui boitait. Cela lui donnait des allures
de sauterelle. Elle était timide, gauche, maladroite en tout ce qu’elle faisait.
Elle s’accrochait avec crainte, au plus humble, au plus inaperçu, au moins
riche de nous, qui la gardait un jour ou un mois, suivant ses moyens.
Comment s’était-elle trouvée parmi nous, personne ne le savait plus.
L’avait-on rencontrée, un soir de pochardise, au bal des Canotiers et
emmenée dans une de ces rafles de femmes que nous faisions souvent?
L’avions-nous invitée à déjeuner, en la voyant seule, assise à une petite
table, dans un coin. Aucun de nous ne l’aurait pu dire; mais elle faisait
partie de la bande.
Nous l’avions baptisée Ça ira, parce qu’elle se plaignait toujours de la
destinée, de sa malchance, de ses déboires. On lui disait chaque dimanche:
—Eh bien, Ça ira, ça va-t-il?
Et elle répondait toujours:
—Non, pas trop, mais faut espérer que ça ira mieux un jour.
Comment ce pauvre être disgracieux et gauche était-il arrivé à faire le
métier qui demande le plus de grâce, d’adresse, de ruse et de beauté?
Mystère. Paris, d’ailleurs, est plein de filles d’amour laides à dégoûter un
gendarme.
Que faisait-elle pendant les six autres jours de la semaine? Plusieurs fois,
elle nous avait dit qu’elle travaillait. A quoi? nous l’ignorions, indifférents à
son existence.
Et puis, je l’avais à peu près perdue de vue. Notre groupe s’était émietté
peu à peu, laissant la place à une autre génération, à qui nous avions aussi
laissé Ça ira. Je l’appris en allant déjeuner chez Fournaise de temps en
temps.
Nos successeurs, ignorant pourquoi nous l’avions baptisée ainsi, avaient
cru à un nom d’Orientale et la nommaient Zaïra; puis ils avaient cédé à leur
tour leurs canots et quelques canotières à la génération suivante. (Une
génération de canotiers vit, en général, trois ans sur l’eau, puis quitte la
Seine pour entrer dans la magistrature, la médecine ou la politique.)
Zaïra était alors devenue Zara, puis, plus tard, Zara s’était encore
modifié en Sarah. On la crut alors israélite.
Les tout derniers, ceux à monocle, l’appelaient donc tout simplement
«La Juive».
Puis elle disparut.
Et voilà que je la retrouvais marchande de tabac à Barviller.

Je lui dis:
—Eh bien, ça va donc, à présent?
Elle répondit:
—Un peu mieux.
Une curiosité me saisit de connaître la vie de cette femme. Autrefois je
n’y aurais point songé; aujourd’hui, je me sentais intrigué, attiré, tout à fait
intéressé. Je lui demandai:
—Comment as-tu fait pour avoir de la chance?
—Je ne sais pas. Ça m’est arrivé comme je m’y attendais le moins.
—Est-ce à Chatou que tu l’as rencontrée!
—Oh non!
—Où ça donc?
—A Paris, dans l’hôtel que j’habitais.
—Ah! Est-ce que tu n’avais pas une place à Paris?
—Oui, j’étais chez madame Ravelet.
—Qui ça, madame Ravelet?
—Tu ne connais pas madame Ravelet? Oh!
—Mais non.
—La modiste, la grande modiste de la rue de Rivoli.
Et la voilà qui se met à me raconter mille choses de sa vie ancienne,
mille choses secrètes de la vie parisienne, l’intérieur d’une maison de
modes, l’existence de ces demoiselles, leurs aventures, leurs idées, toute
l’histoire d’un cœur d’ouvrière, cet épervier de trottoir qui chasse par les
rues, le matin, en allant au magasin, le midi, en flânant, nu-tête, après le
repas, et le soir en montant chez elle.
Elle disait, heureuse de parler de l’autrefois:
—Si tu savais comme on est canaille... et comme on en fait de roides.
Nous nous les racontions chaque jour. Vrai, on se moque des hommes, tu
sais!
Moi, la première rosserie que j’ai faite, c’est au sujet d’un parapluie. J’en
avais un vieux, en alpaga, un parapluie à en être honteuse. Comme je le
fermais en arrivant, un jour de pluie, voilà la grande Louise qui me dit:
—Comment! tu oses sortir avec ça!
—Mais je n’en ai pas d’autre, et, en ce moment, les fonds sont bas.
Ils étaient toujours bas les fonds!
Elle me répond:
—Vas en chercher un à la Madeleine.
Moi, ça m’étonne.
Elle reprend:
—C’est là que nous les prenons, toutes; on en a autant qu’on veut.
Et elle m’explique la chose. C’est bien simple.
Donc, je m’en allai avec Irma à la Madeleine. Nous trouvons le
sacristain et nous lui expliquons comment nous avons oublié un parapluie la
semaine d’avant. Alors il nous demande si nous nous rappelons son
manche, et je lui fais l’explication d’un manche avec une pomme d’agate. Il
nous introduit dans une chambre où il y avait plus de cinquante parapluies
perdus; nous les regardons tous et nous ne trouvons pas le mien; mais moi
j’en choisis un beau, un très beau, à manche d’ivoire sculpté. Louise est
allée le réclamer quelques jours après. Elle l’a décrit avant de l’avoir vu, et
on le lui a donné sans méfiance.
Pour faire ça, on s’habillait très chic.
Et elle riait en ouvrant et laissant retomber le couvercle à charnières de
la grande boîte à tabac.
Elle reprit:
—Oh! on en avait des tours, et on en avait de si drôles. Tiens, nous
étions cinq à l’atelier, quatre ordinaires et une très bien, Irma, la belle Irma.
Elle était très distinguée, et elle avait un amant au Conseil d’Etat. Ça ne
l’empêchait pas de lui en faire porter joliment. Voilà qu’un hiver elle nous
dit:
—Vous ne savez pas, nous allons en faire une bien bonne.
Et elle nous conta son idée.
Tu sais, Irma, elle avait une tournure à troubler la tête de tous les
hommes, et puis une taille, et puis des hanches qui leur faisaient venir l’eau
à la bouche. Donc elle imagina de nous faire gagner cent francs à chacune
pour nous acheter des bagues, et elle arrangea la chose que voici:
Tu sais que je n’étais pas riche, à ce moment-là, les autres non plus; ça
n’allait guère, nous gagnions cent francs par mois au magasin, rien de plus.
Il fallait trouver. Je sais bien que nous avions chacune deux ou trois amants
habitués qui donnaient un peu, mais pas beaucoup. A la promenade de midi,
il arrivait quelquefois qu’on amorçait un monsieur qui revenait le
lendemain; on le faisait poser quinze jours, et puis on cédait. Mais ces
hommes-là, ça ne rapporte jamais gros. Ceux de Chatou, c’était pour le
plaisir. Oh! si tu savais les ruses que nous avions; vrai, c’était à mourir de
rire. Donc, quand Irma nous proposa de nous faire gagner cent francs, nous
voilà toutes allumées. C’est très vilain ce que je vais te raconter, mais ça ne
fait rien; tu connais la vie, toi, et puis quand on est resté quatre ans à
Chatou...
Donc elle nous dit:
—Nous allons lever au bal de l’Opéra ce qu’il y a de mieux à Paris
comme hommes, les plus distingués et les plus riches. Moi, je les connais.
Nous n’avons pas cru, d’abord, que c’était vrai; parce que ces hommes-
là ne sont pas faits pour les modistes, pour Irma oui, mais pour nous, non.
Oh! elle était d’un chic, cette Irma. Tu sais, nous avions coutume de dire à
l’atelier que, si l’empereur l’avait connue, il l’aurait certainement épousée.
Pour lors, elle nous fit habiller de ce que nous avions de mieux et elle
nous dit:
—Vous, vous n’entrerez pas au bal, vous allez rester chacune dans un
fiacre dans les rues voisines. Un monsieur viendra qui montera dans votre
voiture. Dès qu’il sera entré, vous l’embrasserez le plus gentiment que vous
pourrez; et puis vous pousserez un grand cri pour montrer que vous vous
êtes trompée, que vous en attendiez un autre. Ça allumera le pigeon de voir
qu’il prend la place d’un autre et il voudra rester par force; vous résisterez,
vous ferez les cent coups pour le chasser... et puis... vous irez souper avec
lui... Alors il vous devra un bon dédommagement.
Tu ne comprends point encore, n’est-ce pas? Eh bien, voici ce qu’elle fit,
la rosse.
Elle nous fit monter toutes les quatre dans quatre voitures, des voitures
de cercle, des voitures bien comme il faut, puis elle nous plaça dans des
rues voisines de l’Opéra. Alors, elle alla au bal, toute seule. Comme elle
connaissait, par leur nom, les hommes les plus marquants de Paris, parce
que la patronne fournissait leurs femmes, elle en choisit d’abord un pour
l’intriguer. Elle lui en dit de toutes les sortes, car elle a de l’esprit aussi.
Quand elle le vit bien emballé, elle ôta son loup, et il fut pris comme dans
un filet. Donc il voulut l’emmener tout de suite, et elle lui donna rendez-
vous, dans une demi-heure, dans une voiture en face du nº 20 de la rue
Taitbout. C’était moi, dans cette voiture-là! J’étais bien enveloppée et la
figure voilée. Donc, tout d’un coup, un monsieur passa sa tête à la portière,
et il dit:
—C’est vous?
Je réponds tout bas:
—Oui, c’est moi, montez vite.
Il monte; et moi je le saisis dans mes bras et je l’embrasse, mais je
l’embrasse à lui couper la respiration; puis je reprends:
—Oh! que je suis heureuse! que je suis heureuse!
Et, tout d’un coup, je crie:
—Mais ce n’est pas toi! Oh! mon Dieu! Oh! mon Dieu!
Et je me mets à pleurer.
Tu juges si voilà un homme embarrassé! Il cherche d’abord à me
consoler; il s’excuse, proteste qu’il s’est trompé aussi!
Moi, je pleurais toujours, mais moins fort; et je poussais de gros soupirs.
Alors il me dit des choses très douces. C’était un homme tout à fait comme
il faut; et puis ça l’amusait maintenant de me voir pleurer de moins en
moins.
Bref, de fil en aiguille, il m’a proposé d’aller souper. Moi, j’ai refusé;
j’ai voulu sauter de la voiture; il m’a retenue par la taille; et puis embrassée;
comme j’avais fait à son entrée.
Et puis... et puis... nous avons... soupé... tu comprends... et il m’a
donné... devine... voyons, devine... il m’a donné cinq cents francs!... Crois-
tu qu’il y en a des hommes généreux!
Enfin, la chose a réussi pour tout le monde. C’est Louise qui a eu le
moins avec deux cents francs. Mais, tu sais, Louise, vrai, elle était trop
maigre!
La marchande de tabac allait toujours, vidant d’un seul coup tous ses
souvenirs amassés depuis si longtemps dans son cœur fermé de débitante
officielle. Tout l’autrefois pauvre et drôle remuait son âme. Elle regrettait
cette vie galante et bohème du trottoir parisien, faite de privations et de
caresses payées, de rire et de misère, de ruses et d’amour vrai par moments.
Je lui dis:
—Mais comment as-tu obtenu ton débit de tabac?
Elle sourit:
—Oh! c’est toute une histoire. Figure-toi que j’avais dans mon hôtel,
porte à porte, un étudiant en droit, mais, tu sais, un de ces étudiants qui ne
font rien. Celui-là, il vivait au café, du matin au soir; et il aimait le billard,
comme je n’ai jamais vu aimer personne.
Quand j’étais seule, nous passions la soirée ensemble quelquefois. C’est
de lui que j’ai eu Roger.
—Qui ça, Roger?
—Mon fils.
—Ah!
—Il me donna une petite pension pour élever le gosse, mais je pensais
bien que ce garçon-là ne me rapporterait rien, d’autant plus que je n’ai
jamais vu un homme aussi fainéant, mais là, jamais. Au bout de dix ans, il
en était encore à son premier examen. Quand sa famille vit qu’on n’en
pourrait rien tirer, elle le rappela chez elle en province; mais nous étions
demeurés en correspondance à cause de l’enfant. Et puis, figure-toi qu’aux
dernières élections, il y a deux ans, j’apprends qu’il a été nommé député
dans son pays. Et puis il a fait des discours à la Chambre. Vrai, dans le
royaume des aveugles, comme on dit... Mais, pour finir, j’ai été le trouver et
il m’a fait obtenir, tout de suite, un bureau de tabac comme fille de
déporté... C’est vrai que mon père a été déporté, mais je n’avais jamais
pensé non plus que ça pourrait me servir.
Bref... Tiens, voilà Roger.

Un grand jeune homme entrait, correct, grave, poseur.


Il embrassa sur le front sa mère, qui me dit:
—Tenez, monsieur, c’est mon fils, chef de bureau à la mairie... Vous
savez... c’est un futur sous-préfet.
Je saluai dignement ce fonctionnaire, et je sortis pour gagner l’hôtel,
après avoir serré, avec gravité, la main tendue de Ça ira.
Ça ira a paru dans le Gil-Blas du mardi 10 novembre 1885.
DÉCOUVERTE.

L E bateau était couvert de monde. La traversée s’annonçant fort belle, les


Havraises allaient faire un tour à Trouville.
On détacha les amarres; un dernier coup de sifflet annonça le départ,
et, aussitôt, un frémissement secoua le corps entier du navire, tandis qu’on
entendait, le long de ses flancs, un bruit d’eau remuée.
Les roues tournèrent quelques secondes, s’arrêtèrent, repartirent
doucement; puis le capitaine, debout sur sa passerelle, ayant crié par le
porte-voix qui descend dans les profondeurs de la machine: «En route!»
elles se mirent à battre la mer avec rapidité.
Nous filions le long de la jetée, couverte de monde. Des gens sur le
bateau agitaient leurs mouchoirs, comme s’ils partaient pour l’Amérique, et
les amis restés à terre répondaient de la même façon.
Le grand soleil de juillet tombait sur les ombrelles rouges, sur les
toilettes claires, sur les visages joyeux, sur l’Océan à peine remué par des
ondulations. Quand on fut sorti du port, le petit bâtiment fit une courbe
rapide, dirigeant son nez pointu sur la côte lointaine entrevue à travers la
brume matinale.
A notre gauche s’ouvrait l’embouchure de la Seine, large de vingt
kilomètres. De place en place les grosses bouées indiquaient les bancs de
sable, et on reconnaissait au loin les eaux douces et bourbeuses du fleuve
qui, ne se mêlant point à l’eau salée, dessinaient de grands rubans jaunes à
travers l’immense nappe verte et pure de la pleine mer.
J’éprouve, aussitôt que je monte sur un bateau, le besoin de marcher de
long en large, comme un marin qui fait le quart. Pourquoi? Je n’en sais rien.
Donc je me mis à circuler sur le pont à travers la foule des voyageurs.
Tout à coup, on m’appela. Je me retournai. C’était un de mes vieux amis,
Henri Sidoine, que je n’avais point vu depuis dix ans.
Après nous être serré les mains, nous recommençâmes ensemble, en
parlant de choses et d’autres, la promenade d’ours en cage que
j’accomplissais tout seul auparavant. Et nous regardions, tout en causant,
les deux lignes de voyageurs assis sur les deux côtés du pont.
Tout à coup Sidoine prononça, avec une véritable expression de rage:
—C’est plein d’Anglais ici! Les sales gens!
C’était plein d’Anglais, en effet. Les hommes debout lorgnaient
l’horizon d’un air important qui semblait dire: «C’est nous, les Anglais, qui
sommes les maîtres de la mer! Boum, boum! nous voilà!»
Et tous les voiles blancs qui flottaient sur leurs chapeaux blancs avaient
l’air des drapeaux de leur suffisance.
Les jeunes misses plates, dont les chaussures aussi rappelaient les
constructions navales de leur patrie, serrant en des châles multicolores leur
taille droite et leurs bras minces, souriaient vaguement au radieux paysage.
Leurs petites têtes, poussées au bout de ces longs corps, portaient des
chapeaux anglais d’une forme étrange, et, derrière leurs crânes, leurs
maigres chevelures enroulées ressemblaient à des couleuvres lofées.
Et les vieilles misses, encore plus grêles, ouvrant au vent leur mâchoire
nationale, paraissaient menacer l’espace de leurs dents jaunes et
démesurées.
On sentait, en passant près d’elles, une odeur de caoutchouc et d’eau
dentifrice.
Sidoine répéta, avec une colère grandissante:
—Les sales gens! On ne pourra donc pas les empêcher de venir en
France?
Je demandai en souriant:
—Pourquoi leur en veux-tu? Quant à moi, ils me sont parfaitement
indifférents.
Il prononça:
—Oui, toi, parbleu! Mais moi, j’ai épousé une Anglaise. Voilà.
Je m’arrêtai pour lui rire au nez.
—Ah! diable. Conte-moi ça. Et elle te rend donc très malheureux?
Il haussa les épaules:
—Non, pas précisément.
—Alors... elle te... elle te... trompe?
—Malheureusement non. Ça me ferait une cause de divorce et j’en serais
débarrassé.
—Alors, je ne comprends pas!
—Tu ne comprends pas? Ça ne m’étonne point. Eh bien, elle a tout
simplement appris le français, pas autre chose! Écoute:
«Je n’avais pas le moindre désir de me marier, quand je vins passer l’été
à Étretat, voici deux ans. Rien de plus dangereux que les villes d’eaux. On
ne se figure pas combien les fillettes y sont à leur avantage. Paris sied aux
femmes et la campagne aux jeunes filles.
Les promenades à ânes, les bains du matin, les déjeuners sur l’herbe,
autant de pièges à mariage. Et, vraiment, il n’y a rien de plus gentil qu’une
enfant de dix-huit ans qui court à travers un champ ou qui ramasse des
fleurs le long d’un chemin.
Je fis la connaissance d’une famille anglaise descendue au même hôtel
que moi. Le père ressemblait aux hommes que tu vois là, et la mère à toutes
les Anglaises.
Il y avait deux fils, de ces garçons tout en os, qui jouent du matin au soir
à des jeux violents, avec des balles, des massues ou des raquettes; puis deux
filles, l’aînée, une sèche, encore une Anglaise de boîte à conserves; la
cadette, une merveille. Une blonde, ou plutôt une blondine avec une tête
venue du ciel. Quand elles se mettent à être jolies, les gredines, elles sont
divines. Celle-là avait des yeux bleus, de ces yeux bleus qui semblent
contenir toute la poésie, tout le rêve, toute l’espérance, tout le bonheur du
monde!
Quel horizon ça vous ouvre dans les songes infinis, deux yeux de femme
comme ceux-là! Comme ça répond bien à l’attente éternelle et confuse de
notre cœur!
Il faut dire aussi que, nous autres Français, nous adorons les étrangères.
Aussitôt que nous rencontrons une Russe, une Italienne, une Suédoise, une
Espagnole ou une Anglaise un peu jolie, nous en tombons amoureux
instantanément. Tout ce qui vient du dehors nous enthousiasme, drap pour
culotte, chapeaux, gants, fusils et... femmes.
Nous avons tort, cependant.
Mais je crois que ce qui nous séduit le plus dans les exotiques, c’est leur
défaut de prononciation. Aussitôt qu’une femme parle mal notre langue, elle
est charmante; si elle fait une faute de français par mot, elle est exquise, et
si elle baragouine d’une façon tout à fait inintelligible, elle devient
irrésistible.
Tu ne te figures pas comme c’est gentil d’entendre dire à une mignonne
bouche rose: «J’aimé bôcoup la gigotte.»
Ma petite Anglaise Kate parlait une langue invraisemblable. Je n’y
comprenais rien dans les premiers jours, tant elle inventait de mots
inattendus; puis, je devins absolument amoureux de cet argot comique et
gai.
Tous les termes estropiés, bizarres, ridicules prenaient sur ses lèvres un
charme délicieux; et nous avions, le soir, sur la terrasse du Casino, de
longues conversations qui ressemblaient à des énigmes parlées.
Je l’épousai! Je l’aimais follement comme on peut aimer un Rêve. Car
les vrais amants n’adorent jamais qu’un rêve qui a pris une forme de
femme.
Te rappelles-tu les admirables vers de Louis Bouilhet:

Tu n’as jamais été, dans tes jours les plus rares,


Qu’un banal instrument sous mon archet vainqueur,
Et, comme un air qui sonne au bois creux des guitares,
J’ai fait chanter mon rêve au vide de ton cœur.

Eh bien, mon cher, le seul tort que j’ai eu, ç’a été de donner à ma femme
un professeur de français.
Tant qu’elle a martyrisé le dictionnaire et supplicié la grammaire, je l’ai
chérie.
Nos causeries étaient simples. Elles me révélaient la grâce surprenante
de son être, l’élégance incomparable de son geste; elles me la montraient
comme un merveilleux bijou parlant, une poupée de chair faite pour le
baiser, sachant énumérer à peu près ce qu’elle aimait, pousser parfois des
exclamations bizarres, et exprimer d’une façon coquette, à force d’être
incompréhensible et imprévue, des émotions ou des sensations peu
compliquées.
Elle ressemblait bien aux jolis jouets qui disent «papa» et «maman», en
prononçant—Baâba—et Baâmban.
Aurais-je pu croire que...
Elle parle, à présent... Elle parle... mal... très mal... Elle fait tout autant
de fautes... Mais on la comprend... oui, je la comprends... je sais... je la
connais...
J’ai ouvert ma poupée pour regarder dedans... j’ai vu. Et il faut causer,
mon cher!
Ah! tu ne les connais pas, toi, les opinions, les idées, les théories d’une
jeune Anglaise bien élevée, à laquelle je ne peux rien reprocher, et qui me
répète, du matin au soir, toutes les phrases d’un dictionnaire de la
conversation à l’usage des pensionnats de jeunes personnes.
Tu as vu ces surprises du cotillon, ces jolis papiers dorés qui renferment
d’exécrables bonbons. J’en avais une. Je l’ai déchirée. J’ai voulu manger le
dedans et suis resté tellement dégoûté que j’ai des haut-le-cœur, à présent,
rien qu’en apercevant une de ses compatriotes.
J’ai épousé un perroquet à qui une vieille institutrice anglaise aurait
enseigné le français: comprends-tu?»

Le port de Trouville montrait maintenant ses jetées de bois couvertes de


monde.
Je dis:
—Où est ta femme?
Il prononça:
—Je l’ai ramenée à Étretat.
—Et toi, où vas-tu?
—Moi? moi je vais me distraire à Trouville.
Puis, après un silence, il ajouta:
—Tu ne te figures pas comme ça peut être bête quelquefois, une femme.
Découverte a paru dans le Gaulois du jeudi 4 septembre 1884.
SOLITUDE.
C’était après un dîner d’hommes. On avait été fort gai. Un d’eux, un
vieil ami, me dit:
—Veux-tu remonter à pied l’avenue des Champs-Élysées?
Et nous voilà partis, suivant à pas lents la longue promenade, sous les
arbres à peine vêtus de feuilles encore. Aucun bruit, que cette rumeur
confuse et continue que fait Paris. Un vent frais nous passait sur le visage,
et la légion des étoiles semait sur le ciel noir une poudre d’or.
Mon compagnon me dit:
—Je ne sais pourquoi, je respire mieux ici, la nuit, que partout ailleurs. Il
me semble que ma pensée s’y élargit. J’ai, par moments, ces espèces de
lueurs dans l’esprit qui font croire, pendant une seconde, qu’on va découvrir
le divin secret des choses. Puis la fenêtre se referme. C’est fini.
De temps en temps, nous voyions glisser deux ombres le long des
massifs; nous passions devant un banc où deux êtres, assis côte à côte, ne
faisaient qu’une tache noire.
Mon voisin murmura:
—Pauvres gens! Ce n’est pas du dégoût qu’ils m’inspirent, mais une
immense pitié. Parmi tous les mystères de la vie humaine, il en est un que
j’ai pénétré: notre grand tourment dans l’existence vient de ce que nous
sommes éternellement seuls, et tous nos efforts, tous nos actes ne tendent
qu’à fuir cette solitude. Ceux-là, ces amoureux des bancs en plein air,
cherchent, comme nous, comme toutes les créatures, à faire cesser leur
isolement, rien que pendant une minute au moins; mais ils demeurent, ils
demeureront toujours seuls; et nous aussi.
On s’en aperçoit plus ou moins, voilà tout.
Depuis quelque temps j’endure cet abominable supplice d’avoir compris,
d’avoir découvert l’affreuse solitude où je vis, et je sais que rien ne peut la
faire cesser, rien, entends-tu! Quoi que nous tentions, quoi que nous
fassions, quels que soient l’élan de nos cœurs, l’appel de nos lèvres et
l’étreinte de nos bras, nous sommes toujours seuls.
Je t’ai entraîné ce soir, à cette promenade, pour ne pas rentrer chez moi,
parce que je souffre horriblement, maintenant, de la solitude de mon
logement. A quoi cela me servira-t-il? Je te parle, tu m’écoutes, et nous
sommes seuls tous deux, côte à côte, mais seuls. Me comprends-tu?
Bienheureux les simples d’esprit, dit l’Écriture. Ils ont l’illusion du
bonheur. Ils ne sentent pas, ceux-là, notre misère solitaire, ils n’errent pas,
comme moi, dans la vie, sans autre contact que celui des coudes, sans autre
joie que l’égoïste satisfaction de comprendre, de voir, de deviner et de
souffrir sans fin de la connaissance de notre éternel isolement.
Tu me trouves un peu fou, n’est-ce pas?
Écoute-moi. Depuis que j’ai senti la solitude de mon être, il me semble
que je m’enfonce, chaque jour davantage, dans un souterrain sombre, dont
je ne trouve pas les bords, dont je ne connais pas la fin, et qui n’a point de
bout, peut-être! J’y vais sans personne avec moi, sans personne autour de
moi, sans personne de vivant faisant cette même route ténébreuse. Ce
souterrain, c’est la vie. Parfois j’entends des bruits, des voix, des cris... je
m’avance à tâtons vers ces rumeurs confuses. Mais je ne sais jamais au
juste d’où elles partent; je ne rencontre jamais personne, je ne trouve jamais
une autre main dans ce noir qui m’entoure. Me comprends-tu?
Quelques hommes ont parfois deviné cette souffrance atroce.
Musset s’est écrié:

Qui vient? Qui m’appelle? Personne.


Je suis seul.—C’est l’heure qui sonne.
O solitude!—O pauvreté!

Mais, chez lui, ce n’était là qu’un doute passager, et non pas une
certitude définitive, comme chez moi. Il était poète; il peuplait la vie de
fantômes, de rêves. Il n’était jamais vraiment seul.—Moi, je suis seul!
Gustave Flaubert, un des grands malheureux de ce monde, parce qu’il
était un des grands lucides, n’écrivit-il pas à une amie cette phrase
désespérante: «Nous sommes tous dans un désert. Personne ne comprend
personne.»
Non, personne ne comprend personne, quoi qu’on pense, quoi qu’on
dise, quoi qu’on tente. La terre sait-elle ce qui se passe dans ces étoiles que
voilà, jetées comme une graine de feu à travers l’espace, si loin que nous
apercevons seulement la clarté de quelques-unes, alors que l’innombrable
armée des autres est perdue dans l’infini, si proches qu’elles forment peut-
être un tout, comme les molécules d’un corps?
Eh bien, l’homme ne sait pas davantage ce qui se passe dans un autre
homme. Nous sommes plus loin l’un de l’autre que ces astres, plus isolés
surtout, parce que la pensée est insondable.
Sais-tu quelque chose de plus affreux que ce constant frôlement des êtres
que nous ne pouvons pénétrer! Nous nous aimons les uns les autres comme
si nous étions enchaînés, tout près, les bras tendus, sans parvenir à nous
joindre. Un torturant besoin d’union nous travaille, mais tous nos efforts
restent stériles, nos abandons inutiles, nos confidences infructueuses, nos
étreintes impuissantes, nos caresses vaines. Quand nous voulons nous
mêler, nos élans de l’un vers l’autre ne font que nous heurter l’un à l’autre.
Je ne me sens jamais plus seul que lorsque je livre mon cœur à quelque
ami, parce que je comprends mieux alors l’infranchissable obstacle. Il est
là, cet homme; je vois ses yeux clairs sur moi; mais son âme, derrière eux,
je ne la connais point. Il m’écoute. Que pense-t-il? Oui, que pense-t-il? Tu
ne comprends pas ce tourment? Il me hait peut-être? ou me méprise? ou se
moque de moi? Il réfléchit à ce que je dis, il me juge, il me raille, il me
condamne, m’estime médiocre ou sot. Comment savoir ce qu’il pense?
Comment savoir s’il m’aime comme je l’aime? et ce qui s’agite dans cette
petite tête ronde? Quel mystère que la pensée inconnue d’un être, la pensée
cachée et libre, que nous ne pouvons ni connaître, ni conduire, ni dominer,
ni vaincre!
Et moi, j’ai beau vouloir me donner tout entier, ouvrir toutes les portes
de mon âme, je ne parviens point à me livrer. Je garde au fond, tout au fond,
ce lieu secret du Moi où personne ne pénètre. Personne ne peut le découvrir,
y entrer, parce que personne ne me ressemble, parce que personne ne
comprend personne.
Me comprends-tu, au moins, en ce moment, toi? Non, tu me juges fou!
tu m’examines, tu te gardes de moi! Tu te demandes: «Qu’est-ce qu’il a, ce
soir?» mais si tu parviens à saisir un jour, à bien deviner mon horrible et
subtile souffrance, viens-t’en me dire seulement: Je t’ai compris! et tu me
rendras heureux, une seconde, peut-être.
Ce sont les femmes qui me font encore le mieux apercevoir ma solitude.
Misère! Misère! Comme j’ai souffert par elles, parce qu’elles m’ont
donné souvent, plus que les hommes, l’illusion de n’être pas seul!
Quand on entre dans l’Amour, il semble qu’on s’élargit. Une félicité
surhumaine vous envahit. Sais-tu pourquoi? Sais-tu d’où vient cette
sensation d’immense bonheur? C’est uniquement parce qu’on s’imagine
n’être plus seul. L’isolement, l’abandon de l’être humain paraît cesser.
Quelle erreur!
Plus tourmentée encore que nous par cet éternel besoin d’amour qui
ronge notre cœur solitaire, la femme est le grand mensonge du Rêve.
Tu connais ces heures délicieuses passées face à face avec cet être à
longs cheveux, aux traits charmeurs et dont le regard nous affole. Quel
délire égare notre esprit! Quelle illusion nous emporte!
Elle et moi, nous n’allons plus faire qu’un, tout à l’heure, semble-t-il?
Mais ce tout à l’heure n’arrive jamais, et, après des semaines d’attente,
d’espérance et de joie trompeuse, je me retrouve tout à coup, un jour, plus
seul que je ne l’avais encore été.
Après chaque baiser, après chaque étreinte, l’isolement s’agrandit. Et
comme il est navrant, épouvantable.
Un poète, M. Sully Prudhomme, n’a-t-il pas écrit:

Les caresses ne sont que d’inquiets transports,


Infructueux essais du pauvre amour qui tente
L’impossible union des âmes par les corps...

Et puis, adieu. C’est fini. C’est à peine si on reconnaît cette femme qui a
été tout pour nous pendant un moment de la vie, et dont nous n’avons
jamais connu la pensée intime et banale sans doute!
Aux heures mêmes où il semblait que, dans un accord mystérieux des
êtres, dans un complet emmêlement des désirs et de toutes les aspirations,
on était descendu jusqu’au profond de son âme, un mot, un seul mot,
parfois, nous révélait notre erreur, nous montrait, comme un éclair dans la
nuit, le trou noir entre nous.
Et pourtant, ce qu’il y a encore de meilleur au monde, c’est de passer un
soir auprès d’une femme qu’on aime, sans parler, heureux presque
complètement par la seule sensation de sa présence. Ne demandons pas
plus, car jamais deux êtres ne se mêlent.
Quant à moi, maintenant, j’ai fermé mon âme. Je ne dis plus à personne
ce que je crois, ce que je pense et ce que j’aime. Me sachant condamné à
l’horrible solitude, je regarde les choses, sans jamais émettre mon avis. Que
m’importent les opinions, les querelles, les plaisirs, les croyances! Ne
pouvant rien partager avec personne, je me suis désintéressé de tout. Ma
pensée, invisible, demeure inexplorée. J’ai des phrases banales pour
répondre aux interrogations de chaque jour, et un sourire qui dit: «oui»,
quand je ne veux même pas prendre la peine de parler.
Me comprends-tu?

Nous avions remonté la longue avenue jusqu’à l’Arc de triomphe de


l’Étoile, puis nous étions redescendus jusqu’à la place de la Concorde, car il
avait énoncé tout cela lentement, en ajoutant encore beaucoup d’autres
choses dont je ne me souviens plus.
Il s’arrêta et, brusquement, tendant le bras vers le haut obélisque de
granit, debout sur le pavé de Paris et qui perdait, au milieu des étoiles, son
long profil égyptien, monument exilé, portant au flanc l’histoire de son pays
écrite en signes étranges, mon ami s’écria:
—Tiens, nous sommes tous comme cette pierre.
Puis il me quitta sans ajouter un mot.
Était-il gris? Était-il fou? Était-il sage? Je ne le sais encore. Parfois il me
semble qu’il avait raison; parfois il me semble qu’il avait perdu l’esprit.
Solitude a paru dans le Gaulois du lundi 3 mars 1884.
AU BORD DU LIT.
Un grand feu flambait dans l’âtre. Sur la table japonaise, deux tasses à
thé se faisaient face, tandis que la théière fumait à côté contre le sucrier
flanqué du carafon de rhum.
Le comte de Sallure jeta son chapeau, ses gants et sa fourrure sur une
chaise, tandis que la comtesse, débarrassée de sa sortie de bal, rajustait un
peu ses cheveux devant la glace. Elle se souriait aimablement à elle-même
en tapotant, du bout de ses doigts fins et luisants de bagues, les cheveux
frisés des tempes. Puis elle se tourna vers son mari. Il la regardait depuis
quelques secondes, et semblait hésiter comme si une pensée intime l’eût
gêné.
Enfin il dit:
—Vous a-t-on assez fait la cour, ce soir?
Elle le considéra dans les yeux, le regard allumé d’une flamme de
triomphe et de défi, et répondit:
—Je l’espère bien!
Puis elle s’assit à sa place. Il se mit en face d’elle et reprit en cassant
une brioche:
—C’en était presque ridicule... pour moi!
Elle demanda:
—Est-ce une scène? avez-vous l’intention de me faire des reproches?
—Non, ma chère amie, je dis seulement que ce M. Burel a été presque
inconvenant auprès de vous. Si... si... si j’avais eu des droits... je me serais
fâché.
—Mon cher ami, soyez franc. Vous ne pensez plus aujourd’hui comme
vous pensiez l’an dernier, voilà tout. Quand j’ai su que vous aviez une
maîtresse, une maîtresse que vous aimiez, vous ne vous occupiez guère si
on me faisait ou si on ne me faisait pas la cour. Je vous ai dit mon chagrin,
j’ai dit, comme vous ce soir, mais avec plus de raison: Mon ami, vous
compromettez Mᵐᵉ de Servy, vous me faites de la peine et vous me rendez
ridicule. Qu’avez-vous répondu? Oh! vous m’avez parfaitement laissé
entendre que j’étais libre, que le mariage, entre gens intelligents, n’était
qu’une association d’intérêts, un lien social, mais non un lien moral. Est-ce
vrai? Vous m’avez laissé comprendre que votre maîtresse était infiniment
mieux que moi, plus séduisante, plus femme! Vous avez dit: plus femme.
Tout cela était entouré, bien entendu, de ménagements d’homme bien élevé,
enveloppé de compliments, énoncé avec une délicatesse à laquelle je rends
hommage. Je n’en ai pas moins parfaitement compris.
Il a été convenu que nous vivrions désormais ensemble, mais
complètement séparés. Nous avions un enfant qui formait entre nous un
trait d’union.
Vous m’avez presque laissé deviner que vous ne teniez qu’aux
apparences, que je pouvais, s’il me plaisait, prendre un amant pourvu que
cette liaison restât secrète. Vous avez longuement disserté, et fort bien, sur
la finesse des femmes, sur leur habileté pour ménager les convenances, etc.
J’ai compris, mon ami, parfaitement compris. Vous aimiez alors
beaucoup, beaucoup Mᵐᵉ de Servy, et ma tendresse légitime, ma tendresse
légale vous gênait. Je vous enlevais, sans doute, quelques-uns de vos
moyens. Nous avons, depuis lors, vécu séparés. Nous allons dans le monde
ensemble, nous en revenons ensemble, puis nous rentrons chacun chez
nous.
Or, depuis un mois ou deux, vous prenez des allures d’homme jaloux.
Qu’est-ce que cela veut dire?
—Ma chère amie, je ne suis point jaloux, mais j’ai peur de vous voir
vous compromettre. Vous êtes jeune, vive, aventureuse...
—Pardon, si nous parlons d’aventures, je demande à faire la balance
entre nous.
—Voyons, ne plaisantez pas, je vous prie. Je vous parle en ami, en ami
sérieux. Quant à tout ce que vous venez de dire, c’est fortement exagéré.
—Pas du tout. Vous avez avoué, vous m’avez avoué votre liaison, ce qui
équivalait à me donner l’autorisation de vous imiter. Je ne l’ai pas fait...
—Permettez...
—Laissez-moi donc parler. Je ne l’ai pas fait. Je n’ai point d’amant, et je
n’en ai pas eu... jusqu’ici. J’attends... je cherche... je ne trouve pas. Il me
faut quelqu’un de bien... de mieux que vous... C’est un compliment que je
vous fais et vous n’avez pas l’air de le remarquer.
—Ma chère, toutes ces plaisanteries sont absolument déplacées.
—Mais je ne plaisante pas le moins du monde. Vous m’avez parlé du
dix-huitième siècle, vous m’avez laissé entendre que vous étiez régence. Je
n’ai rien oublié. Le jour où il me conviendra de cesser d’être ce que je suis,
vous aurez beau faire, entendez-vous, vous serez, sans même vous en
douter... cocu comme d’autres.
—Oh!... pouvez-vous prononcer de pareils mots?
—De pareils mots!... Mais vous avez ri comme un fou quand Mᵐᵉ de
Gers a déclaré que M. de Servy avait l’air d’un cocu à la recherche de ses
cornes.
—Ce qui peut paraître drôle dans la bouche de Mᵐᵉ de Gers devient
inconvenant dans la vôtre.
—Pas du tout. Mais vous trouvez très plaisant le mot cocu quand il s’agit
de M. de Servy, et vous le jugez fort malsonnant quand il s’agit de vous.
Tout dépend du point de vue. D’ailleurs je ne tiens pas à ce mot, je ne l’ai
prononcé que pour voir si vous êtes mûr.
—Mûr... Pour quoi?
—Mais pour l’être. Quand un homme se fâche en entendant dire cette
parole, c’est qu’il... brûle. Dans deux mois, vous rirez tout le premier si je
parle d’un... coiffé. Alors... oui... quand on l’est, on ne le sent pas.
—Vous êtes, ce soir, tout à fait mal élevée. Je ne vous ai jamais vue
ainsi.
—Ah! voilà... j’ai changé... en mal. C’est votre faute.
—Voyons, ma chère, parlons sérieusement. Je vous prie, je vous supplie
de ne pas autoriser, comme vous l’avez fait ce soir, les poursuites
inconvenantes de M. Burel.
—Vous êtes jaloux. Je le disais bien.
—Mais non, non. Seulement je désire n’être pas ridicule. Je ne veux pas
être ridicule. Et si je revois ce monsieur vous parler dans les... épaules, ou
plutôt entre les seins...
—Il cherchait un porte-voix.
—Je... je lui tirerai les oreilles.
—Seriez-vous amoureux de moi, par hasard?
—On le pourrait être de femmes moins jolies.
—Tiens, comme vous voilà! C’est que je ne suis plus amoureuse de
vous, moi!

Le comte s’est levé. Il fait le tour de la petite table, et, passant derrière
sa femme, lui dépose vivement un baiser sur la nuque. Elle se dresse d’une
secousse, et, le regardant au fond des yeux:
—Plus de ces plaisanteries-là, entre nous, s’il vous plaît. Nous vivons
séparés. C’est fini.
—Voyons, ne vous fâchez pas. Je vous trouve ravissante depuis quelque
temps.
—Alors... alors... c’est que j’ai gagné. Vous aussi... vous me trouvez...
mûre.
—Je vous trouve ravissante, ma chère; vous avez des bras, un teint, des
épaules...
—Qui plairaient à M. Burel...
—Vous êtes féroce. Mais là... vrai... je ne connais pas de femme aussi
séduisante que vous.
—Vous êtes à jeun.
—Hein?
—Je dis: Vous êtes à jeun.
—Comment ça?
—Quand on est à jeun, on a faim, et quand on a faim, on se décide à
manger des choses qu’on n’aimerait point à un autre moment. Je suis le
plat... négligé jadis que vous ne seriez pas fâché de vous mettre sous la
dent... ce soir.
—Oh! Marguerite! Qui vous a appris à parler comme ça?
—Vous! Voyons: depuis votre rupture avec Mᵐᵉ de Servy, vous avez eu,
à ma connaissance, quatre maîtresses, des cocottes celles-là, des artistes,
dans leur partie. Alors, comment voulez-vous que j’explique autrement que
par un jeûne momentané vos... velléités de ce soir.
—Je serai franc et brutal, sans politesse. Je suis redevenu amoureux de
vous. Pour de vrai, très fort. Voilà.
—Tiens, tiens. Alors vous voudriez... recommencer?
—Oui, Madame.
—Ce soir!
—Oh! Marguerite!
—Bon. Vous voilà encore scandalisé. Mon cher, entendons-nous. Nous
ne sommes plus rien l’un à l’autre, n’est-ce pas? Je suis votre femme, c’est
vrai, mais votre femme—libre. J’allais prendre un engagement d’un autre
côté, vous me demandez la préférence. Je vous la donnerai... à prix égal.
—Je ne comprends pas.
—Je m’explique. Suis-je aussi bien que vos cocottes? Soyez franc.
—Mille fois mieux.
—Mieux que la mieux?
—Mille fois.
—Eh bien, combien vous a-t-elle coûté, la mieux, en trois mois?
—Je n’y suis plus.
—Je dis: combien vous a coûté, en trois mois, la plus charmante de vos
maîtresses, en argent, bijoux, soupers, dîners, théâtre, etc., entretien
complet, enfin?
—Est-ce que je sais, moi?
—Vous devez le savoir. Voyons, un prix moyen, modéré. Cinq mille
francs par mois: est-ce à peu près juste?
—Oui... à peu près.
—Eh bien, mon ami, donnez-moi tout de suite cinq mille francs et je suis
à vous pour un mois, à compter de ce soir.
—Vous êtes folle.
—Vous le prenez ainsi; bonsoir.

La comtesse sort, et entre dans sa chambre à coucher. Le lit est


entr’ouvert. Un vague parfum flotte, imprègne les tentures.
Le comte apparaissant à la porte:
—Ça sent très bon, ici.
—Vraiment?... Ça n’a pourtant pas changé. Je me sers toujours de peau
d’Espagne.
—Tiens, c’est étonnant... ça sent très bon.
—C’est possible. Mais, vous, faites-moi le plaisir de vous en aller parce
que je vais me coucher.
—Marguerite!
—Allez-vous-en!

Il entre tout à fait et s’assied dans un fauteuil.


La comtesse:
—Ah! c’est comme ça. Eh bien, tant pis pour vous.
Elle ôte son corsage de bal lentement, dégageant ses bras nus et blancs.
Elle les lève au-dessus de sa tête pour se décoiffer devant la glace; et, sous
une mousse de dentelle, quelque chose de rose apparaît au bord du corset
de soie noire.
Le comte se lève vivement et vient vers elle.
La comtesse:
—Ne m’approchez pas, ou je me fâche!...
Il la saisit à pleins bras et cherche ses lèvres.
Alors, elle, se penchant vivement, saisit sur sa toilette un verre d’eau
parfumée pour sa bouche, et, par-dessus l’épaule, le lance en plein visage
de son mari.
Il se relève, ruisselant d’eau, furieux, murmurant:
—C’est stupide.
—Ça se peut... Mais vous savez mes conditions: Cinq mille francs.
—Mais ce serait idiot!...
—Pourquoi ça?
—Comment, pourquoi? Un mari payer pour coucher avec sa femme!...
—Oh!... quels vilains mots vous employez!
—C’est possible. Je répète que ce serait idiot de payer sa femme, sa
femme légitime.
—Il est bien plus bête, quand on a une femme légitime, d’aller payer des
cocottes.
—Soit, mais je ne veux pas être ridicule.
La comtesse s’est assise sur une chaise longue. Elle retire lentement ses
bas en les retournant comme une peau de serpent. Sa jambe rose sort de la
gaine de soie mauve, et le pied mignon se pose sur le tapis.
Le comte s’approche un peu et d’une voix tendre:
—Quelle drôle d’idée vous avez là?
—Quelle idée?
—De me demander cinq mille francs.
—Rien de plus naturel. Nous sommes étrangers l’un à l’autre, n’est-ce
pas? Or vous me désirez. Vous ne pouvez pas m’épouser puisque nous
sommes mariés. Alors vous m’achetez, un peu moins peut-être qu’une
autre.
Or, réfléchissez. Cet argent, au lieu d’aller chez une gueuse qui en ferait
je ne sais quoi, restera dans votre maison, dans votre ménage. Et puis, pour
un homme intelligent, est-il quelque chose de plus amusant, de plus original
que de se payer sa propre femme. On n’aime bien, en amour illégitime, que
ce qui coûte cher, très cher. Vous donnez à notre amour... légitime, un prix
nouveau, une saveur de débauche, un ragoût de... polissonnerie en le...
tarifant comme un amour coté. Est-ce pas vrai?

Elle s’est levée presque nue et se dirige vers un cabinet de toilette.


—Maintenant, monsieur, allez-vous-en, ou je sonne ma femme de
chambre.
Le comte debout, perplexe, mécontent, la regarde, et, brusquement, lui
jetant à la tête son portefeuille:
—Tiens, gredine, en voilà six mille... Mais tu sais?...
La comtesse ramasse l’argent, le compte, et d’une voix lente:
—Quoi?
—Ne t’y accoutume pas.
Elle éclate de rire, et allant vers lui:
—Chaque mois, cinq mille, monsieur, ou bien je vous renvoie à vos
cocottes. Et même si... si vous êtes content... je vous demanderai de
l’augmentation.
Au bord du lit a paru dans le Gil-Blas du mardi 23 octobre 1883, sous la signature:
Maufrigneuse.
PETIT SOLDAT.

C HAQUE dimanche, sitôt qu’ils étaient libres, les deux petits soldats se
mettaient en marche.
Ils tournaient à droite en sortant de la caserne, traversaient
Courbevoie à grands pas rapides, comme s’ils eussent fait une promenade
militaire; puis, dès qu’ils avaient quitté les maisons, ils suivaient, d’une
allure plus calme, la grand’route poussiéreuse et nue qui mène à Bezons.
Ils étaient petits, maigres, perdus dans leur capote trop large, trop
longue, dont les manches couvraient leurs mains, gênés par la culotte rouge,
trop vaste, qui les forçait à écarter les jambes pour aller vite. Et sous le
shako raide et haut, on ne voyait plus qu’un rien du tout de figure, deux
pauvres figures creuses de Bretons, naïves, d’une naïveté presque animale,
avec des yeux bleus doux et calmes.
Ils ne parlaient jamais durant le trajet, allant devant eux, avec la même
idée en tête, qui leur tenait lieu de causerie, car ils avaient trouvé, à l’entrée
du petit bois des Champioux, un endroit leur rappelant leur pays, et ils ne se
sentaient bien que là.
Au croisement des routes de Colombes et de Chatou, comme on arrivait
sous les arbres, ils ôtaient leur coiffure qui leur écrasait la tête, et ils
s’essuyaient le front.
Ils s’arrêtaient toujours un peu sur le pont de Bezons pour regarder la
Seine. Ils demeuraient là, deux ou trois minutes, courbés en deux, penchés
sur le parapet; ou bien ils considéraient le grand bassin d’Argenteuil où
couraient les voiles blanches et inclinées des clippers, qui, peut-être, leur
remémoraient la mer bretonne, le port de Vannes dont ils étaient voisins, et
les bateaux pêcheurs s’en allant à travers le Morbihan, vers le large.
Dès qu’ils avaient franchi la Seine, ils achetaient leurs provisions chez le
charcutier, le boulanger et le marchand de vin du pays. Un morceau de
boudin, quatre sous de pain et un litre de petit bleu constituaient leurs vivres
emportés dans leurs mouchoirs. Mais, aussitôt sortis du village, ils
n’avançaient plus qu’à pas très lents et ils se mettaient à parler.
Devant eux, une plaine maigre, semée de bouquets d’arbres, conduisait
au bois, au petit bois qui leur avait paru ressembler à celui de Kermarivan.
Les blés et les avoines bordaient l’étroit chemin perdu dans la jeune verdure
des récoltes, et Jean Kerderen disait chaque fois à Luc Le Ganidec:
—C’est tout comme auprès de Plounivon.
—Oui, c’est tout comme.
Ils s’en allaient, côte à côte, l’esprit plein de vagues souvenirs du pays,
pleins d’images réveillées, d’images naïves comme les feuilles coloriées
d’un sou. Ils revoyaient un coin de champ, une haie, un bout de lande, un
carrefour, une croix de granit.
Chaque fois aussi, ils s’arrêtaient auprès d’une pierre qui bornait une
propriété, parce qu’elle avait quelque chose du dolmen de Locneuven.
En arrivant au premier bouquet d’arbres, Luc Le Ganidec cueillait tous
les dimanches une baguette, une baguette de coudrier; il se mettait à
arracher tout doucement l’écorce en pensant aux gens de là-bas.
Jean Kerderen portait les provisions.
De temps en temps, Luc citait un nom, rappelait un fait de leur enfance,
en quelques mots seulement qui leur donnaient longtemps à songer. Et le
pays, le cher pays lointain les repossédait peu à peu, les envahissait, leur
envoyait, à travers la distance, ses formes, ses bruits, ses horizons connus,
ses odeurs, l’odeur de la lande verte où courait l’air marin.
Ils ne sentaient plus les exhalaisons du fumier parisien dont sont
engraissées les terres de la banlieue, mais le parfum des ajoncs fleuris que
cueille et qu’emporte la brise salée du large. Et les voiles des canotiers,
apparues au-dessus des berges, leur semblaient les voiles des caboteurs,
aperçues derrière la longue plaine qui s’en allait de chez eux jusqu’au bord
des flots.
Ils marchaient à petits pas, Luc Le Ganidec et Jean Kerderen, contents et
tristes, hantés par un chagrin doux, un chagrin lent et pénétrant de bête en
cage, qui se souvient.
Et quand Luc avait fini de dépouiller la mince baguette de son écorce, ils
arrivaient au coin du bois où ils déjeunaient tous les dimanches.
Ils retrouvaient les deux briques cachées par eux dans un taillis, et ils
allumaient un petit feu de branches pour cuire leur boudin sur la pointe de
leur couteau.
Et quand ils avaient déjeuné, mangé leur pain jusqu’à la dernière miette,
et bu leur vin jusqu’à la dernière goutte, ils demeuraient assis dans l’herbe
côte à côte, sans rien dire, les yeux au loin, les paupières lourdes, les doigts
croisés comme à la messe, leurs jambes rouges allongées à côté des
coquelicots du champ; et le cuir de leurs shakos et le cuivre de leurs
boutons luisaient sous le soleil ardent, faisaient s’arrêter les alouettes qui
chantaient en planant sur leurs têtes.

Vers midi, ils commençaient à tourner leurs regards de temps en temps


du côté du village de Bezons, car la fille à la vache allait venir.
Elle passait devant eux tous les dimanches pour aller traire et remiser sa
vache, la seule vache du pays qui fût à l’herbe, et qui pâturait une étroite
prairie sur la lisière du bois, plus loin.
Ils apercevaient bientôt la servante, seul être humain marchant à travers
la campagne, et ils se sentaient réjouis par les reflets brillants que jetait le
seau de fer-blanc sous la flamme du soleil. Jamais ils ne parlaient d’elle. Ils
étaient seulement contents de la voir, sans comprendre pourquoi.
C’était une grande fille vigoureuse, rousse et brûlée par l’ardeur des
jours clairs, une grande fille hardie de la campagne parisienne.
Une fois, en les revoyant assis à la même place, elle leur dit:
—Bonjour... vous v’nez donc toujours ici?
Luc Le Ganidec, plus osant, balbutia:
—Oui, nous v’nons au repos.
Ce fut tout. Mais, le dimanche suivant, elle rit en les apercevant, elle rit
avec une bienveillance protectrice de femme dégourdie qui sentait leur
timidité, et elle demanda:
—Qué qu’ vous faites comme ça? C’est-il qu’ vous r’gardez pousser
l’herbe?
Luc égayé sourit aussi:
—P’tête ben.
Elle reprit:
—Hein! Ça va pas vite.
Il répliqua, riant toujours:
—Pour ça, non.
Elle passa. Mais en revenant avec son seau plein de lait, elle s’arrêta
encore devant eux, et leur dit:
Welcome to Our Bookstore - The Ultimate Destination for Book Lovers
Are you passionate about books and eager to explore new worlds of
knowledge? At our website, we offer a vast collection of books that
cater to every interest and age group. From classic literature to
specialized publications, self-help books, and children’s stories, we
have it all! Each book is a gateway to new adventures, helping you
expand your knowledge and nourish your soul
Experience Convenient and Enjoyable Book Shopping Our website is more
than just an online bookstore—it’s a bridge connecting readers to the
timeless values of culture and wisdom. With a sleek and user-friendly
interface and a smart search system, you can find your favorite books
quickly and easily. Enjoy special promotions, fast home delivery, and
a seamless shopping experience that saves you time and enhances your
love for reading.
Let us accompany you on the journey of exploring knowledge and
personal growth!

ebookgate.com

You might also like