Compare commits
10 Commits
0a01eb1418
...
5143ac8801
Author | SHA1 | Date | |
---|---|---|---|
5143ac8801 | |||
|
44824de57f | ||
|
d0b37c6542 | ||
|
a8f010243f | ||
|
95d5584ef1 | ||
|
f831f24802 | ||
|
4a1efd05cc | ||
|
1a010b2c49 | ||
|
9cdd9b4358 | ||
|
c887194ed6 |
44
README.md
44
README.md
@ -1,45 +1,3 @@
|
|||||||
### Assignment
|
|
||||||
|
|
||||||
# Demographic Data Analyzer
|
# Demographic Data Analyzer
|
||||||
|
|
||||||
In this challenge you must analyze demographic data using Pandas. You are given a dataset of demographic data that was extracted from the 1994 Census database. Here is a sample of what the data looks like:
|
This is the boilerplate for the Demographic Data Analyzer project. Instructions for building your project can be found at https://www.freecodecamp.org/learn/data-analysis-with-python/data-analysis-with-python-projects/demographic-data-analyzer
|
||||||
|
|
||||||
| | age | workclass | fnlwgt | education | education-num | marital-status | occupation | relationship | race | sex | capital-gain | capital-loss | hours-per-week | native-country | salary |
|
|
||||||
|---:|------:|:-----------------|---------:|:------------|----------------:|:-------------------|:------------------|:---------------|:-------|:-------|---------------:|---------------:|-----------------:|:-----------------|:---------|
|
|
||||||
| 0 | 39 | State-gov | 77516 | Bachelors | 13 | Never-married | Adm-clerical | Not-in-family | White | Male | 2174 | 0 | 40 | United-States | <=50K |
|
|
||||||
| 1 | 50 | Self-emp-not-inc | 83311 | Bachelors | 13 | Married-civ-spouse | Exec-managerial | Husband | White | Male | 0 | 0 | 13 | United-States | <=50K |
|
|
||||||
| 2 | 38 | Private | 215646 | HS-grad | 9 | Divorced | Handlers-cleaners | Not-in-family | White | Male | 0 | 0 | 40 | United-States | <=50K |
|
|
||||||
| 3 | 53 | Private | 234721 | 11th | 7 | Married-civ-spouse | Handlers-cleaners | Husband | Black | Male | 0 | 0 | 40 | United-States | <=50K |
|
|
||||||
| 4 | 28 | Private | 338409 | Bachelors | 13 | Married-civ-spouse | Prof-specialty | Wife | Black | Female | 0 | 0 | 40 | Cuba | <=50K |
|
|
||||||
|
|
||||||
|
|
||||||
You must use Pandas to answer the following questions:
|
|
||||||
* How many people of each race are represented in this dataset? This should be a Pandas series with race names as the index labels. (`race` column)
|
|
||||||
* What is the average age of men?
|
|
||||||
* What is the percentage of people who have a Bachelor's degree?
|
|
||||||
* What percentage of people with advanced education (`Bachelors`, `Masters`, or `Doctorate`) make more than 50K?
|
|
||||||
* What percentage of people without advanced education make more than 50K?
|
|
||||||
* What is the minimum number of hours a person works per week?
|
|
||||||
* What percentage of the people who work the minimum number of hours per week have a salary of more than 50K?
|
|
||||||
* What country has the highest percentage of people that earn >50K and what is that percentage?
|
|
||||||
* Identify the most popular occupation for those who earn >50K in India.
|
|
||||||
|
|
||||||
Use the starter code in the file `demographic_data_anaylizer`. Update the code so all variables set to "None" are set to the appropriate calculation or code. Round all decimals to the nearest tenth.
|
|
||||||
|
|
||||||
Unit tests are written for you under `test_module.py`.
|
|
||||||
|
|
||||||
### Development
|
|
||||||
|
|
||||||
For development, you can use `main.py` to test your functions. Click the "run" button and `main.py` will run.
|
|
||||||
|
|
||||||
### Testing
|
|
||||||
|
|
||||||
We imported the tests from `test_module.py` to `main.py` for your convenience. The tests will run automatically whenever you hit the "run" button.
|
|
||||||
|
|
||||||
### Submitting
|
|
||||||
|
|
||||||
Copy your project's URL and submit it to freeCodeCamp.
|
|
||||||
|
|
||||||
### Dataset Source
|
|
||||||
|
|
||||||
Dua, D. and Graff, C. (2019). UCI Machine Learning Repository [http://archive.ics.uci.edu/ml]. Irvine, CA: University of California, School of Information and Computer Science.
|
|
||||||
|
@ -3,42 +3,33 @@ import pandas as pd
|
|||||||
|
|
||||||
def calculate_demographic_data(print_data=True):
|
def calculate_demographic_data(print_data=True):
|
||||||
# Read data from file
|
# Read data from file
|
||||||
df = None
|
df = pd.read_csv("adult.data.csv")
|
||||||
|
|
||||||
# How many of each race are represented in this dataset? This should be a Pandas series with race names as the index labels.
|
# How many of each race are represented in this dataset? This should be a Pandas series with race names as the index labels.
|
||||||
race_count = None
|
race_count = df['race'].value_counts()
|
||||||
|
|
||||||
# What is the average age of men?
|
# What is the average age of men?
|
||||||
average_age_men = None
|
average_age_men = round(df['age'][df['sex'] == 'Male'].mean(), 1)
|
||||||
|
|
||||||
# What is the percentage of people who have a Bachelor's degree?
|
# What is the percentage of people who have a Bachelor's degree?
|
||||||
percentage_bachelors = None
|
percentage_bachelors = round(df['education'].value_counts(normalize=True).mul(100).loc['Bachelors'], 1)
|
||||||
|
|
||||||
# What percentage of people with advanced education (`Bachelors`, `Masters`, or `Doctorate`) make more than 50K?
|
# What percentage of people with advanced education (`Bachelors`, `Masters`, or `Doctorate`) make more than 50K?
|
||||||
# What percentage of people without advanced education make more than 50K?
|
higher_education_rich = round(df['salary'][(df['education'] == 'Bachelors') | (df['education'] == 'Masters') | (df['education'] == 'Doctorate')].value_counts(normalize=True).mul(100).loc['>50K'], 1)
|
||||||
|
lower_education_rich = round(df['salary'][(df['education'] != 'Bachelors') & (df['education'] != 'Masters') & (df['education'] != 'Doctorate')].value_counts(normalize=True).mul(100).loc[">50K"], 1)
|
||||||
# with and without `Bachelors`, `Masters`, or `Doctorate`
|
|
||||||
higher_education = None
|
|
||||||
lower_education = None
|
|
||||||
|
|
||||||
# percentage with salary >50K
|
|
||||||
higher_education_rich = None
|
|
||||||
lower_education_rich = None
|
|
||||||
|
|
||||||
# What is the minimum number of hours a person works per week (hours-per-week feature)?
|
# What is the minimum number of hours a person works per week (hours-per-week feature)?
|
||||||
min_work_hours = None
|
min_work_hours = df['hours-per-week'].min()
|
||||||
|
|
||||||
# What percentage of the people who work the minimum number of hours per week have a salary of >50K?
|
# What percentage of the people who work the minimum number of hours per week have a salary of >50K?
|
||||||
num_min_workers = None
|
rich_percentage = round(df['salary'][df['hours-per-week'] == df['hours-per-week'].min()].value_counts(normalize=True).mul(100).loc[">50K"], 1)
|
||||||
|
|
||||||
rich_percentage = None
|
|
||||||
|
|
||||||
# What country has the highest percentage of people that earn >50K?
|
# What country has the highest percentage of people that earn >50K?
|
||||||
highest_earning_country = None
|
highest_earning_country = (df['native-country'][df['salary'] == '>50K'].value_counts()/df['native-country'].value_counts()).idxmax()
|
||||||
highest_earning_country_percentage = None
|
highest_earning_country_percentage = round((df['native-country'][df['salary'] == '>50K'].value_counts()/df['native-country'].value_counts()).max() * 100, 1)
|
||||||
|
|
||||||
# Identify the most popular occupation for those who earn >50K in India.
|
# Identify the most popular occupation for those who earn >50K in India.
|
||||||
top_IN_occupation = None
|
top_IN_occupation = df['occupation'][(df['native-country'] == 'India') & (df['salary'] == '>50K')].value_counts().idxmax()
|
||||||
|
|
||||||
# DO NOT MODIFY BELOW THIS LINE
|
# DO NOT MODIFY BELOW THIS LINE
|
||||||
|
|
||||||
|
136
poetry.lock
generated
136
poetry.lock
generated
@ -1,58 +1,132 @@
|
|||||||
[[package]]
|
# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand.
|
||||||
category = "main"
|
|
||||||
description = "NumPy is the fundamental package for array computing with Python."
|
|
||||||
name = "numpy"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.5"
|
|
||||||
version = "1.18.5"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
name = "numpy"
|
||||||
|
version = "1.24.2"
|
||||||
|
description = "Fundamental package for array computing in Python"
|
||||||
category = "main"
|
category = "main"
|
||||||
description = "Powerful data structures for data analysis, time series, and statistics"
|
|
||||||
name = "pandas"
|
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6.1"
|
python-versions = ">=3.8"
|
||||||
version = "1.0.4"
|
files = [
|
||||||
|
{file = "numpy-1.24.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eef70b4fc1e872ebddc38cddacc87c19a3709c0e3e5d20bf3954c147b1dd941d"},
|
||||||
|
{file = "numpy-1.24.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8d2859428712785e8a8b7d2b3ef0a1d1565892367b32f915c4a4df44d0e64f5"},
|
||||||
|
{file = "numpy-1.24.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6524630f71631be2dabe0c541e7675db82651eb998496bbe16bc4f77f0772253"},
|
||||||
|
{file = "numpy-1.24.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a51725a815a6188c662fb66fb32077709a9ca38053f0274640293a14fdd22978"},
|
||||||
|
{file = "numpy-1.24.2-cp310-cp310-win32.whl", hash = "sha256:2620e8592136e073bd12ee4536149380695fbe9ebeae845b81237f986479ffc9"},
|
||||||
|
{file = "numpy-1.24.2-cp310-cp310-win_amd64.whl", hash = "sha256:97cf27e51fa078078c649a51d7ade3c92d9e709ba2bfb97493007103c741f1d0"},
|
||||||
|
{file = "numpy-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7de8fdde0003f4294655aa5d5f0a89c26b9f22c0a58790c38fae1ed392d44a5a"},
|
||||||
|
{file = "numpy-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4173bde9fa2a005c2c6e2ea8ac1618e2ed2c1c6ec8a7657237854d42094123a0"},
|
||||||
|
{file = "numpy-1.24.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cecaed30dc14123020f77b03601559fff3e6cd0c048f8b5289f4eeabb0eb281"},
|
||||||
|
{file = "numpy-1.24.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a23f8440561a633204a67fb44617ce2a299beecf3295f0d13c495518908e910"},
|
||||||
|
{file = "numpy-1.24.2-cp311-cp311-win32.whl", hash = "sha256:e428c4fbfa085f947b536706a2fc349245d7baa8334f0c5723c56a10595f9b95"},
|
||||||
|
{file = "numpy-1.24.2-cp311-cp311-win_amd64.whl", hash = "sha256:557d42778a6869c2162deb40ad82612645e21d79e11c1dc62c6e82a2220ffb04"},
|
||||||
|
{file = "numpy-1.24.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d0a2db9d20117bf523dde15858398e7c0858aadca7c0f088ac0d6edd360e9ad2"},
|
||||||
|
{file = "numpy-1.24.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c72a6b2f4af1adfe193f7beb91ddf708ff867a3f977ef2ec53c0ffb8283ab9f5"},
|
||||||
|
{file = "numpy-1.24.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c29e6bd0ec49a44d7690ecb623a8eac5ab8a923bce0bea6293953992edf3a76a"},
|
||||||
|
{file = "numpy-1.24.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eabd64ddb96a1239791da78fa5f4e1693ae2dadc82a76bc76a14cbb2b966e96"},
|
||||||
|
{file = "numpy-1.24.2-cp38-cp38-win32.whl", hash = "sha256:e3ab5d32784e843fc0dd3ab6dcafc67ef806e6b6828dc6af2f689be0eb4d781d"},
|
||||||
|
{file = "numpy-1.24.2-cp38-cp38-win_amd64.whl", hash = "sha256:76807b4063f0002c8532cfeac47a3068a69561e9c8715efdad3c642eb27c0756"},
|
||||||
|
{file = "numpy-1.24.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4199e7cfc307a778f72d293372736223e39ec9ac096ff0a2e64853b866a8e18a"},
|
||||||
|
{file = "numpy-1.24.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:adbdce121896fd3a17a77ab0b0b5eedf05a9834a18699db6829a64e1dfccca7f"},
|
||||||
|
{file = "numpy-1.24.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:889b2cc88b837d86eda1b17008ebeb679d82875022200c6e8e4ce6cf549b7acb"},
|
||||||
|
{file = "numpy-1.24.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f64bb98ac59b3ea3bf74b02f13836eb2e24e48e0ab0145bbda646295769bd780"},
|
||||||
|
{file = "numpy-1.24.2-cp39-cp39-win32.whl", hash = "sha256:63e45511ee4d9d976637d11e6c9864eae50e12dc9598f531c035265991910468"},
|
||||||
|
{file = "numpy-1.24.2-cp39-cp39-win_amd64.whl", hash = "sha256:a77d3e1163a7770164404607b7ba3967fb49b24782a6ef85d9b5f54126cc39e5"},
|
||||||
|
{file = "numpy-1.24.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:92011118955724465fb6853def593cf397b4a1367495e0b59a7e69d40c4eb71d"},
|
||||||
|
{file = "numpy-1.24.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9006288bcf4895917d02583cf3411f98631275bc67cce355a7f39f8c14338fa"},
|
||||||
|
{file = "numpy-1.24.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:150947adbdfeceec4e5926d956a06865c1c690f2fd902efede4ca6fe2e657c3f"},
|
||||||
|
{file = "numpy-1.24.2.tar.gz", hash = "sha256:003a9f530e880cb2cd177cba1af7220b9aa42def9c4afc2a2fc3ee6be7eb2b22"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pandas"
|
||||||
|
version = "1.5.3"
|
||||||
|
description = "Powerful data structures for data analysis, time series, and statistics"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "pandas-1.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406"},
|
||||||
|
{file = "pandas-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572"},
|
||||||
|
{file = "pandas-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996"},
|
||||||
|
{file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354"},
|
||||||
|
{file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23"},
|
||||||
|
{file = "pandas-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328"},
|
||||||
|
{file = "pandas-1.5.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc"},
|
||||||
|
{file = "pandas-1.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d"},
|
||||||
|
{file = "pandas-1.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc"},
|
||||||
|
{file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae"},
|
||||||
|
{file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6"},
|
||||||
|
{file = "pandas-1.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003"},
|
||||||
|
{file = "pandas-1.5.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813"},
|
||||||
|
{file = "pandas-1.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31"},
|
||||||
|
{file = "pandas-1.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792"},
|
||||||
|
{file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7"},
|
||||||
|
{file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf"},
|
||||||
|
{file = "pandas-1.5.3-cp38-cp38-win32.whl", hash = "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51"},
|
||||||
|
{file = "pandas-1.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373"},
|
||||||
|
{file = "pandas-1.5.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa"},
|
||||||
|
{file = "pandas-1.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee"},
|
||||||
|
{file = "pandas-1.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a"},
|
||||||
|
{file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0"},
|
||||||
|
{file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5"},
|
||||||
|
{file = "pandas-1.5.3-cp39-cp39-win32.whl", hash = "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a"},
|
||||||
|
{file = "pandas-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9"},
|
||||||
|
{file = "pandas-1.5.3.tar.gz", hash = "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1"},
|
||||||
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
numpy = ">=1.13.3"
|
numpy = [
|
||||||
python-dateutil = ">=2.6.1"
|
{version = ">=1.20.3", markers = "python_version < \"3.10\""},
|
||||||
pytz = ">=2017.2"
|
{version = ">=1.21.0", markers = "python_version >= \"3.10\""},
|
||||||
|
{version = ">=1.23.2", markers = "python_version >= \"3.11\""},
|
||||||
|
]
|
||||||
|
python-dateutil = ">=2.8.1"
|
||||||
|
pytz = ">=2020.1"
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
category = "main"
|
|
||||||
description = "Extensions to the standard Python datetime module"
|
|
||||||
name = "python-dateutil"
|
name = "python-dateutil"
|
||||||
|
version = "2.8.1"
|
||||||
|
description = "Extensions to the standard Python datetime module"
|
||||||
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
|
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
|
||||||
version = "2.8.1"
|
files = [
|
||||||
|
{file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"},
|
||||||
|
{file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"},
|
||||||
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
six = ">=1.5"
|
six = ">=1.5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
category = "main"
|
|
||||||
description = "World timezone definitions, modern and historical"
|
|
||||||
name = "pytz"
|
name = "pytz"
|
||||||
|
version = "2020.1"
|
||||||
|
description = "World timezone definitions, modern and historical"
|
||||||
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
version = "2020.1"
|
files = [
|
||||||
|
{file = "pytz-2020.1-py2.py3-none-any.whl", hash = "sha256:a494d53b6d39c3c6e44c3bec237336e14305e4f29bbf800b599253057fbb79ed"},
|
||||||
|
{file = "pytz-2020.1.tar.gz", hash = "sha256:c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
category = "main"
|
|
||||||
description = "Python 2 and 3 compatibility utilities"
|
|
||||||
name = "six"
|
name = "six"
|
||||||
|
version = "1.15.0"
|
||||||
|
description = "Python 2 and 3 compatibility utilities"
|
||||||
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
|
||||||
version = "1.15.0"
|
files = [
|
||||||
|
{file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"},
|
||||||
|
{file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"},
|
||||||
|
]
|
||||||
|
|
||||||
[metadata]
|
[metadata]
|
||||||
content-hash = "27114271cf207dff3920111c8aa89baba75353cc23851aded0a93b193dc24770"
|
lock-version = "2.0"
|
||||||
python-versions = "^3.8"
|
python-versions = "^3.8"
|
||||||
|
content-hash = "27114271cf207dff3920111c8aa89baba75353cc23851aded0a93b193dc24770"
|
||||||
[metadata.hashes]
|
|
||||||
numpy = ["0172304e7d8d40e9e49553901903dc5f5a49a703363ed756796f5808a06fc233", "34e96e9dae65c4839bd80012023aadd6ee2ccb73ce7fdf3074c62f301e63120b", "3676abe3d621fc467c4c1469ee11e395c82b2d6b5463a9454e37fe9da07cd0d7", "3dd6823d3e04b5f223e3e265b4a1eae15f104f4366edd409e5a5e413a98f911f", "4064f53d4cce69e9ac613256dc2162e56f20a4e2d2086b1956dd2fcf77b7fac5", "4674f7d27a6c1c52a4d1aa5f0881f1eff840d2206989bae6acb1c7668c02ebfb", "7d42ab8cedd175b5ebcb39b5208b25ba104842489ed59fbb29356f671ac93583", "965df25449305092b23d5145b9bdaeb0149b6e41a77a7d728b1644b3c99277c1", "9c9d6531bc1886454f44aa8f809268bc481295cf9740827254f53c30104f074a", "a78e438db8ec26d5d9d0e584b27ef25c7afa5a182d1bf4d05e313d2d6d515271", "a7acefddf994af1aeba05bbbafe4ba983a187079f125146dc5859e6d817df824", "a87f59508c2b7ceb8631c20630118cc546f1f815e034193dc72390db038a5cb3", "ac792b385d81151bae2a5a8adb2b88261ceb4976dbfaaad9ce3a200e036753dc", "b03b2c0badeb606d1232e5f78852c102c0a7989d3a534b3129e7856a52f3d161", "b39321f1a74d1f9183bf1638a745b4fd6fe80efbb1f6b32b932a588b4bc7695f", "cae14a01a159b1ed91a324722d746523ec757357260c6804d11d6147a9e53e3f", "cd49930af1d1e49a812d987c2620ee63965b619257bd76eaaa95870ca08837cf", "e15b382603c58f24265c9c931c9a45eebf44fe2e6b4eaedbb0d025ab3255228b", "e91d31b34fc7c2c8f756b4e902f901f856ae53a93399368d9a0dc7be17ed2ca0", "ef627986941b5edd1ed74ba89ca43196ed197f1a206a3f18cc9faf2fb84fd675", "f718a7949d1c4f622ff548c572e0c03440b49b9531ff00e4ed5738b459f011e8"]
|
|
||||||
pandas = ["034185bb615dc96d08fa13aacba8862949db19d5e7804d6ee242d086f07bcc46", "0c9b7f1933e3226cc16129cf2093338d63ace5c85db7c9588e3e1ac5c1937ad5", "1f6fcf0404626ca0475715da045a878c7062ed39bc859afc4ccf0ba0a586a0aa", "1fc963ba33c299973e92d45466e576d11f28611f3549469aec4a35658ef9f4cc", "29b4cfee5df2bc885607b8f016e901e63df7ffc8f00209000471778f46cc6678", "2a8b6c28607e3f3c344fe3e9b3cd76d2bf9f59bc8c0f2e582e3728b80e1786dc", "2bc2ff52091a6ac481cc75d514f06227dc1b10887df1eb72d535475e7b825e31", "415e4d52fcfd68c3d8f1851cef4d947399232741cc994c8f6aa5e6a9f2e4b1d8", "519678882fd0587410ece91e3ff7f73ad6ded60f6fcb8aa7bcc85c1dc20ecac6", "51e0abe6e9f5096d246232b461649b0aa627f46de8f6344597ca908f2240cbaa", "698e26372dba93f3aeb09cd7da2bb6dd6ade248338cfe423792c07116297f8f4", "83af85c8e539a7876d23b78433d90f6a0e8aa913e37320785cf3888c946ee874", "982cda36d1773076a415ec62766b3c0a21cdbae84525135bdb8f460c489bb5dd", "a647e44ba1b3344ebc5991c8aafeb7cca2b930010923657a273b41d86ae225c4", "b35d625282baa7b51e82e52622c300a1ca9f786711b2af7cbe64f1e6831f4126", "bab51855f8b318ef39c2af2c11095f45a10b74cbab4e3c8199efcc5af314c648"]
|
|
||||||
python-dateutil = ["73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", "75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"]
|
|
||||||
pytz = ["a494d53b6d39c3c6e44c3bec237336e14305e4f29bbf800b599253057fbb79ed", "c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048"]
|
|
||||||
six = ["30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", "8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"]
|
|
||||||
|
16
renovate.json
Normal file
16
renovate.json
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"labels": ["renovate"],
|
||||||
|
"extends": ["config:base"],
|
||||||
|
"branchConcurrentLimit": 20,
|
||||||
|
"dependencyDashboard": true,
|
||||||
|
"major": {
|
||||||
|
"dependencyDashboardApproval": true
|
||||||
|
},
|
||||||
|
"packageRules": [
|
||||||
|
{
|
||||||
|
"matchUpdateTypes": ["minor", "patch", "pin", "digest"],
|
||||||
|
"matchCurrentVersion": "!/^0/",
|
||||||
|
"automerge": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -2,53 +2,54 @@ import unittest
|
|||||||
import demographic_data_analyzer
|
import demographic_data_analyzer
|
||||||
|
|
||||||
class DemographicAnalyzerTestCase(unittest.TestCase):
|
class DemographicAnalyzerTestCase(unittest.TestCase):
|
||||||
def setUp(self):
|
@classmethod
|
||||||
|
def setUpClass(self):
|
||||||
self.data = demographic_data_analyzer.calculate_demographic_data(print_data = False)
|
self.data = demographic_data_analyzer.calculate_demographic_data(print_data = False)
|
||||||
|
|
||||||
def test_race_count(self):
|
def test_race_count(self):
|
||||||
actual = self.data['race_count'].tolist()
|
actual = self.data['race_count'].tolist()
|
||||||
expected = [27816, 3124, 1039, 311, 271]
|
expected = [27816, 3124, 1039, 311, 271]
|
||||||
self.assertAlmostEqual(actual, expected, "Expected race count values to be [27816, 3124, 1039, 311, 271]")
|
self.assertCountEqual(actual, expected, msg="Expected race count values to be [27816, 3124, 1039, 311, 271]")
|
||||||
|
|
||||||
def test_average_age_men(self):
|
def test_average_age_men(self):
|
||||||
actual = self.data['average_age_men']
|
actual = self.data['average_age_men']
|
||||||
expected = 39.4
|
expected = 39.4
|
||||||
self.assertAlmostEqual(actual, expected, "Expected different value for average age of men.")
|
self.assertAlmostEqual(actual, expected, msg="Expected different value for average age of men.")
|
||||||
|
|
||||||
def test_percentage_bachelors(self):
|
def test_percentage_bachelors(self):
|
||||||
actual = self.data['percentage_bachelors']
|
actual = self.data['percentage_bachelors']
|
||||||
expected = 16.4
|
expected = 16.4
|
||||||
self.assertAlmostEqual(actual, expected, "Expected different value for percentage with Bachelors degrees.")
|
self.assertAlmostEqual(actual, expected, msg="Expected different value for percentage with Bachelors degrees.")
|
||||||
|
|
||||||
def test_higher_education_rich(self):
|
def test_higher_education_rich(self):
|
||||||
actual = self.data['higher_education_rich']
|
actual = self.data['higher_education_rich']
|
||||||
expected = 46.5
|
expected = 46.5
|
||||||
self.assertAlmostEqual(actual, expected, "Expected different value for percentage with higher education that earn >50K.")
|
self.assertAlmostEqual(actual, expected, msg="Expected different value for percentage with higher education that earn >50K.")
|
||||||
|
|
||||||
def test_lower_education_rich(self):
|
def test_lower_education_rich(self):
|
||||||
actual = self.data['lower_education_rich']
|
actual = self.data['lower_education_rich']
|
||||||
expected = 17.4
|
expected = 17.4
|
||||||
self.assertAlmostEqual(actual, expected, "Expected different value for percentage without higher education that earn >50K.")
|
self.assertAlmostEqual(actual, expected, msg="Expected different value for percentage without higher education that earn >50K.")
|
||||||
|
|
||||||
def test_min_work_hours(self):
|
def test_min_work_hours(self):
|
||||||
actual = self.data['min_work_hours']
|
actual = self.data['min_work_hours']
|
||||||
expected = 1
|
expected = 1
|
||||||
self.assertAlmostEqual(actual, expected, "Expected different value for minimum work hours.")
|
self.assertAlmostEqual(actual, expected, msg="Expected different value for minimum work hours.")
|
||||||
|
|
||||||
def test_rich_percentage(self):
|
def test_rich_percentage(self):
|
||||||
actual = self.data['rich_percentage']
|
actual = self.data['rich_percentage']
|
||||||
expected = 10
|
expected = 10
|
||||||
self.assertAlmostEqual(actual, expected, "Expected different value for percentage of rich among those who work fewest hours.")
|
self.assertAlmostEqual(actual, expected, msg="Expected different value for percentage of rich among those who work fewest hours.")
|
||||||
|
|
||||||
def test_highest_earning_country(self):
|
def test_highest_earning_country(self):
|
||||||
actual = self.data['highest_earning_country']
|
actual = self.data['highest_earning_country']
|
||||||
expected = 'Iran'
|
expected = 'Iran'
|
||||||
self.assertAlmostEqual(actual, expected, "Expected different value for highest earning country.")
|
self.assertEqual(actual, expected, "Expected different value for highest earning country.")
|
||||||
|
|
||||||
def test_highest_earning_country_percentage(self):
|
def test_highest_earning_country_percentage(self):
|
||||||
actual = self.data['highest_earning_country_percentage']
|
actual = self.data['highest_earning_country_percentage']
|
||||||
expected = 41.9
|
expected = 41.9
|
||||||
self.assertAlmostEqual(actual, expected, "Expected different value for heighest earning country percentage.")
|
self.assertAlmostEqual(actual, expected, msg="Expected different value for highest earning country percentage.")
|
||||||
|
|
||||||
def test_top_IN_occupation(self):
|
def test_top_IN_occupation(self):
|
||||||
actual = self.data['top_IN_occupation']
|
actual = self.data['top_IN_occupation']
|
||||||
|
Loading…
Reference in New Issue
Block a user