A Python Data Analyst’s Toolkit: Learn Python and Python-based Libraries with Applications in Data Analysis and Statistics Gayathri Rajagopalan instant download
A Python Data Analyst’s Toolkit: Learn Python and Python-based Libraries with Applications in Data Analysis and Statistics Gayathri Rajagopalan instant download
https://textbookfull.com/product/data-analysis-from-scratch-with-
python-peters-morgan/
https://textbookfull.com/product/data-analysis-with-python-and-
pyspark-meap-v07-jonathan-rioux/
https://textbookfull.com/product/python-for-data-analysis-data-
wrangling-with-pandas-numpy-and-ipython-wes-mckinney/
https://textbookfull.com/product/python-data-analysis-perform-
data-collection-data-processing-wrangling-visualization-and-
model-building-using-python-3rd-edition-avinash-navlani/
Practical Python Data Visualization: A Fast Track
Approach To Learning Data Visualization With Python
Ashwin Pajankar
https://textbookfull.com/product/practical-python-data-
visualization-a-fast-track-approach-to-learning-data-
visualization-with-python-ashwin-pajankar/
https://textbookfull.com/product/python-2-and-3-compatibility-
with-six-and-python-future-libraries-nanjekye/
https://textbookfull.com/product/learning-data-mining-with-
python-layton/
https://textbookfull.com/product/a-tour-of-data-science-learn-r-
and-python-in-parallel-nailong-zhang/
https://textbookfull.com/product/hands-on-scikit-learn-for-
machine-learning-applications-data-science-fundamentals-with-
python-david-paper/
A Python Data
Analyst’s Toolkit
Learn Python and Python-based
Libraries with Applications in Data
Analysis and Statistics
—
Gayathri Rajagopalan
A Python Data
Analyst’s Toolkit
Learn Python and Python-based
Libraries with Applications in Data
Analysis and Statistics
Gayathri Rajagopalan
A Python Data Analyst’s Toolkit: Learn Python and Python-based Libraries with
Applications in Data Analysis and Statistics
Gayathri Rajagopalan
Introduction������������������������������������������������������������������������������������������������������������xix
v
Table of Contents
vi
Table of Contents
Indexing������������������������������������������������������������������������������������������������������������������������������������ 169
Type of an index object�������������������������������������������������������������������������������������������������������� 170
Creating a custom index and using columns as indexes���������������������������������������������������� 171
Indexes and speed of data retrieval������������������������������������������������������������������������������������ 173
Immutability of an index������������������������������������������������������������������������������������������������������ 174
Alignment of indexes����������������������������������������������������������������������������������������������������������� 176
Set operations on indexes��������������������������������������������������������������������������������������������������� 177
Data types in Pandas���������������������������������������������������������������������������������������������������������������� 178
Obtaining information about data types������������������������������������������������������������������������������ 179
Indexers and selection of subsets of data�������������������������������������������������������������������������������� 182
Understanding loc and iloc indexers����������������������������������������������������������������������������������� 183
Other (less commonly used) indexers for data access�������������������������������������������������������� 188
Boolean indexing for selecting subsets of data������������������������������������������������������������������� 192
Using the query method to retrieve data����������������������������������������������������������������������������� 192
Operators in Pandas������������������������������������������������������������������������������������������������������������������ 193
Representing dates and times in Pandas��������������������������������������������������������������������������������� 194
Converting strings into Pandas Timestamp objects������������������������������������������������������������ 195
Extracting the components of a Timestamp object������������������������������������������������������������� 196
Grouping and aggregation�������������������������������������������������������������������������������������������������������� 197
Examining the properties of the groupby object����������������������������������������������������������������� 199
Filtering groups������������������������������������������������������������������������������������������������������������������� 201
Transform method and groupby������������������������������������������������������������������������������������������ 202
Apply method and groupby������������������������������������������������������������������������������������������������� 204
How to combine objects in Pandas������������������������������������������������������������������������������������������� 204
Append method for adding rows����������������������������������������������������������������������������������������� 205
Concat function (adding rows or columns from other objects)������������������������������������������� 207
Join method – index to index���������������������������������������������������������������������������������������������� 210
Merge method – SQL type join based on common columns����������������������������������������������� 211
viii
Table of Contents
ix
Table of Contents
lmplot���������������������������������������������������������������������������������������������������������������������������������� 266
Strip plot������������������������������������������������������������������������������������������������������������������������������ 267
Swarm plot�������������������������������������������������������������������������������������������������������������������������� 268
Catplot��������������������������������������������������������������������������������������������������������������������������������� 269
Pair plot������������������������������������������������������������������������������������������������������������������������������� 270
Joint plot������������������������������������������������������������������������������������������������������������������������������ 272
Summary���������������������������������������������������������������������������������������������������������������������������������� 273
Review Exercises���������������������������������������������������������������������������������������������������������������������� 274
x
Table of Contents
Index��������������������������������������������������������������������������������������������������������������������� 393
xi
About the Author
Gayathri Rajagopalan works for a leading Indian
multinational organization, with ten years of experience
in the software and information technology industry.
She has degrees in computer engineering and business
adminstration, and is a certified Project Management
Professional (PMP). Some of her key focus areas include
Python, data analytics, machine learning, statistics, and
deep learning. She is proficient in Python, Java, and C/C++
programming. Her hobbies include reading, music, and
teaching programming and data science to beginners.
xiii
About the Technical Reviewer
Manohar Swamynathan is a data science practitioner
and an avid programmer, with over 14 years of experience
in various data science related areas that include data
warehousing, Business Intelligence (BI), analytical tool
development, ad hoc analysis, predictive modeling, data
science product development, consulting, formulating
strategy, and executing analytics programs. He’s had a
career covering the life cycle of data across different
domains such as US mortgage banking, retail/ecommerce,
insurance, and industrial IoT. He has a bachelor’s degree
with a specialization in physics, mathematics, and
computers, and a master’s degree in project management. He’s currently living in
Bengaluru, the Silicon Valley of India.
xv
Acknowledgments
This book is a culmination of a year-long effort and would not have been possible
without my family’s support. I am indebted to them for their patience, kindness, and
encouragement.
I would also like to thank my readers for investing their time and money in this book. It is
my sincere hope that this book adds value to your learning experience.
xvii
Introduction
I had two main reasons for writing this book. When I first started learning data science,
I could not find a centralized overview of all the important topics on this subject.
A practitioner of data science needs to be proficient in at least one programming
language, learn the various aspects of data preparation and visualization, and also
be conversant with various aspects of statistics. The goal of this book is to provide
a consolidated resource that ties these interconnected disciplines together and
introduces these topics to the learner in a graded manner. Secondly, I wanted to provide
material to help readers appreciate the practical aspects of the seemingly abstract
concepts in data science, and also help them to be able to retain what they have learned.
There is a section on case studies to demonstrate how data analysis skills can be applied
to make informed decisions to solve real-world challenges. One of the highlights of
this book is the inclusion of practice questions and multiple-choice questions to help
readers practice and apply whatever they have learned. Most readers read a book and
then forget what they have read or learned, and the addition of these exercises will help
readers avoid this pitfall.
The book helps readers learn three important topics from scratch – the Python
programming language, data analysis, and statistics. It is a self-contained introduction
for anybody looking to start their journey with data analysis using Python, as it focuses
not just on theory and concepts but on practical applications and retention of concepts.
This book is meant for anybody interested in learning Python and Python-based libraries
like Pandas, Numpy, Scipy, and Matplotlib for descriptive data analysis, visualization,
and statistics. The broad categories of skills that readers learn from this book include
programming skills, analytical skills, and problem-solving skills.
The book is broadly divided into three parts – programming with Python, data analysis
and visualization, and statistics. The first part of the book comprises three chapters. It
starts with an introduction to Python – the syntax, functions, conditional statements,
data types, and different types of containers. Subsequently, we deal with advanced
concepts like regular expressions, handling of files, and solving mathematical problems
xix
Introduction
with Python. Python is covered in detail before moving on to data analysis to ensure that
the readers are comfortable with the programming language before they learn how to
use it for purposes of data analysis.
The second part of the book, comprising five chapters, covers the various aspects of
descriptive data analysis, data wrangling and visualization, and the respective Python
libraries used for each of these. There is an introductory chapter covering basic concepts
and terminology in data analysis, and one chapter each on NumPy (the scientific
computation library), Pandas (the data wrangling library), and the visualization
libraries (Matplotlib and Seaborn). A separate chapter is devoted to case studies to
help readers understand some real-world applications of data analysis. Among these
case studies is one on air pollution, using data drawn from an air quality monitoring
station in New Delhi, which has seen alarming levels of pollution in recent years. This
case study examines the trends and patterns of major air pollutants like sulfur dioxide,
nitrogen dioxide, and particulate matter for five years, and comes up with insights and
recommendations that would help with designing mitigation strategies.
The third section of this book focuses on statistics, elucidating important principles in
statistics that are relevant to data science. The topics covered include probability, Bayes
theorem, permutations and combinations, hypothesis testing (ANOVA, chi-squared
test, z-test, and t-test), and the use of various functions in the Scipy library to enable
simplification of tedious calculations involved in statistics.
By the end of this book, the reader will be able to confidently write code in Python, use
various Python libraries and functions for analyzing any dataset, and understand basic
statistical concepts and tests. The code is presented in the form of Jupyter notebooks
that can further be adapted and extended. Readers get the opportunity to test their
understanding with a combination of multiple-choice and coding questions. They
also get an idea about how to use the skills and knowledge they have learned to make
evidence-based decisions for solving real-world problems with the help of case studies.
xx
CHAPTER 1
Getting Familiar
with Python
Python is an open source programming language created by a Dutch programmer
named Guido van Rossum. Named after the British comedy group Monty Python,
Python is a high-level, interpreted, open source language and is one of the most sought-
after and rapidly growing programming languages in the world today. It is also the
language of preference for data science and machine learning.
In this chapter, we first introduce the Jupyter notebook – a web application for running
code in Python. We then cover the basic concepts in Python, including data types,
operators, containers, functions, classes and file handling and exception handling, and
standards for writing code and modules.
The code examples for this book have been written using Python version 3.7.3 and
Anaconda version 4.7.10.
T echnical requirements
Anaconda is an open source platform used widely by Python programmers and data
scientists. Installing this platform installs Python, the Jupyter notebook application, and
hundreds of libraries. The following are the steps you need to follow for installing the
Anaconda distribution.
2. Click the installer for your operating system, as shown in Figure 1-1.
The installer gets downloaded to your system.
1
© Gayathri Rajagopalan 2021
G. Rajagopalan, A Python Data Analyst’s Toolkit, https://doi.org/10.1007/978-1-4842-6399-0_1
Chapter 1 Getting Familiar with Python
3. Open the installer (file downloaded in the previous step) and run it.
Please follow the following steps for downloading all the data files used in this book:
Now that we have installed and launched Jupyter, let us understand how to use this
application in the next section.
JupyterLab is the IDE for Jupyter notebooks. Jupyter notebooks are web applications that
run locally on a user’s machine. They can be used for loading, cleaning, analyzing, and
modeling data. You can add code, equations, images, and markdown text in a Jupyter
notebook. Jupyter notebooks serve the dual purpose of running your code as well as
serving as a platform for presenting and sharing your work with others. Let us look at the
various features of this application.
Type “jupyter notebook” in the search bar next to the start menu.
This will open the Jupyter dashboard. The dashboard can be used
to create new notebooks or open an existing one.
Click inside the first cell in your notebook and type a simple line
of code, as shown in Figure 1-4. Execute the code by selecting Run
Cells from the “Cell” menu, or use the shortcut keys Ctrl+Enter.
3
Chapter 1 Getting Familiar with Python
5. Renaming a notebook
Click the default name of the notebook and type a new name, as
shown in Figure 1-6.
Table 1-1 gives some of the familiar icons found in Jupyter notebooks, the corresponding
menu functions, and the keyboard shortcuts.
5
Chapter 1 Getting Familiar with Python
Adding a new cell to a Esc+b (adding a cell below the Insert ➤ Insert Cell
Jupyter notebook current cell), or Esc+a (adding Above or Insert ➤
a cell above the current cell) Insert Cell Below
Running a given cell Ctrl+Enter (to run selected cell); Cell ➤ Run
Shift+Enter (to run selected cell Selected Cells
and insert a new cell)
If you are not sure about which keyboard shortcut to use, go to: Help ➤ Keyboard
Shortcuts, as shown in Figure 1-8.
• Shift+Enter to run the code in the current cell and move to the next
cell.
T ab Completion
This is a feature that can be used in Jupyter notebooks to help you complete the code
being written. Usage of tab completions can speed up the workflow, reduce bugs, and
quickly complete function names, thus reducing typos and saving you from having to
remember the names of all the modules and functions.
For example, if you want to import the Matplotlib library but don’t remember the
spelling, you could type the first three letters, mat, and press Tab. You would see a drop-
down list, as shown in Figure 1-9. The correct name of the library is the second name in
the drop-down list.
7
Chapter 1 Getting Familiar with Python
One commonly used magic command, shown in the following, is used to display
Matplotlib graphs inside the notebook. Adding this magic command avoids the need
to call the plt.show function separately for showing graphs (the Matplotlib library is
discussed in detail in Chapter 7).
CODE:
%matplotlib inline
Magic commands, like timeit, can also be used to time the execution of a script, as shown
in the following.
CODE:
%%timeit
for i in range(100000):
i*i
Output:
16.1 ms ± 283 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Now that you understand the basics of using Jupyter notebooks, let us get started with
Python and understand the core aspects of this language.
P
ython Basics
In this section, we get familiar with the syntax of Python, commenting, conditional
statements, loops, and functions.
C
omments
A comment explains what a line of code does, and is used by programmers to help others
understand the code they have written. In Python, a comment starts with the # symbol.
8
Chapter 1 Getting Familiar with Python
Proper spacing and indentation are critical in Python. While other languages like Java
and C++ use brackets to enclose blocks of code, Python uses an indent of four spaces
to specify code blocks. One needs to take care of indents to avoid errors. Applications
like Jupyter generally take care of indentation and automatically add four spaces at the
beginning of a block of code.
Printing
The print function prints content to the screen or any other output device.
CODE:
print("Hello!")
To print multiple lines of code, we use triple quotes at the beginning and end of the
string, for example:
CODE:
Output:
Note that we do not use semicolons in Python to end statements, unlike some other
languages.
The format method can be used in conjunction with the print method for embedding
variables within a string. It uses curly braces as placeholders for variables that are passed
as arguments to the method.
Let us look at a simple example where we print variables using the format method.
9
Chapter 1 Getting Familiar with Python
CODE:
weight=4.5
name="Simi"
print("The weight of {} is {}".format(name,weight))
Output:
The preceding statement can also be rewritten as follows without the format method:
CODE:
Note that only the string portion of the print argument is enclosed within quotes. The name
of the variable does not come within quotes. Similarly, if you have any constants in your
print arguments, they also do not come within quotes. In the following example, a Boolean
constant (True), an integer constant (1), and strings are combined in a print statement.
CODE:
Output:
The format fields can specify precision for floating-point numbers. Floating-point
numbers are numbers with decimal points, and the number of digits after the decimal
point can be specified using format fields as follows.
CODE:
x=91.234566
print("The value of x upto 3 decimal points is {:.3f}".format(x))
Output:
We can specify the position of the variables passed to the method. In this example, we
use position “1” to refer to the second object in the argument list, and position “0” to
specify the first object in the argument list.
10
Chapter 1 Getting Familiar with Python
CODE:
y='Jack'
x='Jill'
print("{1} and {0} went up the hill to fetch a pail of water".format(x,y))
Output:
I nput
The input function accepts inputs from the user. The input provided by the user is stored
as a variable of type String. If you want to do any mathematical calculations with any
numeric input, you need to change the data type of the input to int or float, as follows.
CODE:
Output:
V
ariables and Constants
A constant or a literal is a value that does not change, while a variable contains a value
can be changed. We do not have to declare a variable in Python, that is, specify its data
type, unlike other languages like Java and C/C++. We define it by giving the variable a
name and assigning it a value. Based on the value, a data type is automatically assigned
to it. Values are stored in variables using the assignment operator (=). The rules for
naming a variable in Python are as follows:
• a variable name cannot have spaces
11
Chapter 1 Getting Familiar with Python
Operators
The following are some commonly used operators in Python.
Arithmetic operators: Take two integer or float values, perform an operation, and return
a value.
• **(Exponent)
• %(modulo or remainder),
• //(quotient),
• *(multiplication)
• -(subtraction)
• +(addition)
CODE:
(1+9)/2-3
Output:
2.0
12
Chapter 1 Getting Familiar with Python
In the preceding expression, the operation inside the parenthesis is performed first,
which gives 10, followed by division, which gives 5, and then subtraction, which gives the
final output as 2.
Comparison operators: These operators compare two values and evaluate to a true or
false value. The following comparison operators are supported in Python:
• >: Greater than
• < : Less than
• <=: Less than or equal to
• >=: Greater than or equal to
• == : equality. Please note that this is different from the assignment
operator (=)
• !=(not equal to)
Logical (or Boolean) operators: Are similar to comparison operators in that they
also evaluate to a true or false value. These operators operate on Boolean variables or
expressions. The following logical operators are supported in Python:
Output:
False
CODE:
(2>1) or (1>3)
13
Random documents with unrelated
content Scribd suggests to you:
After various improvements had been introduced in the poor law at
Strasburg subsequent to 1500, the magistrates—the clergy and the
monasteries not having shown themselves equal to their task—issued a
new enactment, though even this relied to a great extent on the help of
the clergy. The regulations of Augsburg and Nuremberg were the most
effectual. It was only later, after the work of Capito, Bucer and Hedio at
Strasburg, that, together with the new spirit, changes crept into the
traditional poor-law system of the town.
All the enactments, dating from late mediæval times prior to the
religious innovations, for the poor of the other great German towns,
for instance, of Ratisbon (1523), Breslau (1525) and Würzburg
(1533) are of a more or less similar character. Thus, thanks to the
economic pressure, there was gradually evolved, in the centres of
German prosperity and commercial industry, a sober but practical
and far-sighted poor-law system.[139]
It was not, indeed, so easy to get rid of the existing disorders; to
achieve this a lengthy struggle backed by the regulations just
established would have been necessary. Above all, the tramps and
vagabonds, who delighted in idleness and adventure and who often
developed dangerous proclivities, continued to be the pest of the
land. The cause of this economic disorder was a deep-seated one
and entirely escapes those who declare that beggary sprang solely
from the idea foisted on the Church, viz. that “poverty was
meritorious and begging a respectable trade.”
Not only had the Peasant Rising and the reprisals taken by the
rulers and the towns brought misery on the land and hardened the
hearts of the princes and magistrates, not only had the means
available for the relief of the poor been diminished, first by the
founding of new parishes in place of the old ones, which had in
many cases been supported by the monasteries and foundations,
secondly, by the demands of Protestants for the restitution of many
ecclesiastical benefices given by their Catholic forefathers, thirdly, by
the drying up of the spring of gifts and donations, but “the common
fund, which had been swelled by the shekels of the Church, had now
to bear many new burdens and only what remained—which often
enough was not much—was employed for charitable purposes.” In
the same way, and to an even greater extent, must the Lutheran
ethics be taken into account. Luther’s views on justification by faith
alone destroyed “that impulse of the Middle Ages towards open-
handed charity.” This was “an ethical defect of the Lutheran
doctrine”; it was only owing to his “utter ignorance of the world”
that Luther persisted in believing that faith would, of itself and
without any “law,” beget good works and charity.[169] “It was a
cause of wonder and anxiety to him throughout his life that his
assumption, that faith would be the best ‘taskmaster and the
strongest incentive to good works and kindliness,’ never seemed to
be realised.… The most notable result of Luther’s doctrine of grace
and denial of all human merit was, at least among the masses, an
increase of libertinism and of the spirit of irresponsibility.”[170]
The dire effects of the new principles were also evident in the
large and wealthy towns, the exemplary poor-law regulations of
which we have considered above. After the innovations had made
their way among them we hear little more of provisions being made
against mendicancy, for the promotion of work and for the relief of
poverty. Hence, as regards these corporations … the change of
religion meant, according to Feuchtwanger, “a decline in the quality
of their social philanthropy.” (Cp. above, vol. iv., p. 477 ff.)
From some districts, however, we have better reports of the
results achieved by the relief funds. In times of worst distress good
Christians were always ready to help. Much depended on the spirit
of those concerned in the work. In general, however, the complaints
of the preachers of the new faith, including Melanchthon, wax louder
and louder.[171] They tell us that the patrimony of the poor was
being carried off by the rapacity of the great or disappearing under
the hands of avaricious and careless administrators, whilst new
voluntary contributions were no longer forthcoming. We find no lack
of those, who, like Luther’s friend Paul Eber, are given to noting the
visible, palpable consequences of the wrong done to the
monasteries, brotherhoods and churches.[172]
A long list of statements from respected Protestant contemporaries is
given by Janssen, who concludes: “The whole system of poor relief was
grievously affected by the seizure and squandering of Church goods and
of innumerable charitable bequests intended not only for parochial and
Church use but also for the hospitals, schools and poor-houses.”[173] The
testimonies in question, the frankness of which can only be explained by
the honourable desire to make an end of the crying evil, come, for
instance, from Thomas Rorarius, Andreas Musculus, Johann Winistede,
Erasmus Sarcerius, Ambrose Pape and the General Superintendent,
Cunemann Flinsbach.[174] They tend to show that the new doctrine of
faith alone had dried up the well-spring of self-sacrifice, as indeed
Andreas Hyperius, the Marburg theologian, Christopher Fischer, the
General Superintendent, Daniel Greser, the Superintendent, Sixtus Vischer
and others state in so many words.
The incredible squandering of Church property is proved by official
papers, was pilloried by the professors of the University of Rostock, also is
clear from the minutes of the Visitations of Wesenberg in 1568 and of the
Palatinate in 1556 which bewail “the sin against the property set aside for
God and His Church.”[175] And again, “The present owners have dealt
with the Church property a thousand times worse than the Papists,” they
make no conscience of “selling it, mortgaging it and giving it away.”
Princes belonging to the new faith also raised their voice in protest, for
instance, Duke Barnim XI in 1540, Elector Joachim II of Brandenburg in
1540 and Elector Johann George, 1573. But the sovereigns were unable to
restrain their rapacious nobles. “The great Lords,” the preacher Erasmus
Sarcerius wrote of the Mansfeld district in 1555, “seek to appropriate to
themselves the feudal rights and dues of the clergy and allow their
officials and justices to take forcible action.… The revenues of the Church
are spent in making roads and bridges and giving banquets, and are lent
from hand to hand without hypothecary security.”[176] The Calvinist,
Anton Prætorius, and many others not to mention Catholic
contemporaries, speak in similar terms.
Of the falling off in the Church funds and poor-boxes in the 16th
century in Hesse, in the Saxon Electorate, in Frankfurt-on-the-Main, in
Hamburg and elsewhere abundant proof is met with in the official records,
and this is the case even with regard to Würtemberg in the enactments of
the Dukes from 1552 to 1562, though that country constituted in some
respects an exception;[177] at a later date Duke Johann Frederick
hazarded the opinion that the regulations regarding the fund “had fallen
into oblivion.”
The growth of the proletariate, to remedy the impoverishment of which
no means had as yet been discovered, was in no small measure promoted
by Luther’s facilitation of marriage.
Luther himself had written, that “a boy ought to have recourse to
matrimony as soon as he is twenty and a maid when she is from fifteen to
eighteen years of age, and leave it to God to provide for their
maintenance and that of their children.”[178] Other adherents of the new
faith went even further, Eberlin of Günsburg simply declared: “As soon as
a girl is fifteen, a boy eighteen, they should be given to each other in
marriage.” There were others like the author of a “Predigt über Hunger-
und Sterbejahre, von einem Diener am Wort” (1571), who raised strong
objections against such a course. Dealing with the causes of the evident
increase of “deterioration and ruin” in “lands, towns and villages,” he says,
that “a by no means slight cause is the countless number of lightly
contracted marriages, when people come together and beget children
without knowing where they will get food for them, and so come down
themselves in body and soul, and bring up their children to begging from
their earliest years.” “And I cannot here approve of this sort of thing that
Luther has written: A lad should marry when he is twenty, etc. [see
above]. No, people should not think of marrying and the magistrates
should not allow them to do so before they are sure of being able at least
to provide their families with the necessaries of life, for else, as experience
shows, a miserable, degenerate race is produced.”[179]
What this old writer says is borne out by modern sociologists. One of
them, dealing with the 16th and 17th centuries, says: “These demands [of
Luther and Eberlin] are obviously not practicable from the economic point
of view, but from the ethical standpoint also they seem to us extremely
doubtful. To rush into marriage without prospect of sufficient maintenance
is not trusting God but tempting Him. Such marriages are extremely
immoral actions and they deserve legal punishment on account of their
danger to the community.” “Greater evil to the world can scarcely be
caused in any way than by such marriages. Even in the most favourable
cases such early marriages must have a deteriorating influence on the
physical and intellectual culture of posterity.”[180]
Owing to the neglect of any proper care for the poor the plague of
vagabondage continued on the increase. Luther’s zealous contemporary,
Cyriacus Spangenberg, sought to counteract it by reprinting the Master’s
edition of the “Liber vagatorum.” He says: “False begging and trickery has
so gained the upper hand that scarcely anybody is safe from imposture.”
The Superintendent, Nicholas Selnecker, again republished the writing
with Luther’s preface in 1580, together with some lamentations of his
own. He complains that “there are too many tramps and itinerant scholars
who give themselves up to nothing but knavery,” etc.[181]
Adolf Harnack is only re-echoing the complaints of 16th century
Protestants when he writes: “We may say briefly that, alas, nothing
of importance was achieved, nay, we must go further: the Catholics
are quite right when they assert that they, not we, lived to see a
revival of charitable work in the 16th century, and, that, where
Lutheranism was on the ascendant, social care of the poor was soon
reduced to a worse plight than ever before.”[182] The revival in
Catholic countries to which Harnack refers showed itself particularly
in the 17th century in the activity of the new Orders, whereas at this
time the retrograde movement was still in progress in the opposite
camp. “For a long time the Protestant relief system produced only
insignificant results.” It was not till the rise of Pietism and
Rationalism, i.e. until the inauguration of the admirable Home
Missions, that things began to improve. But Pietism and Rationalism
are both far removed from the original Lutheran orthodoxy.[183]
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
textbookfull.com