Software Attributes#

The sections here tabulate the software attribute database. Each attribute (column) is described in the Attribute Schema. Some columns contain lists of strings which means that they cannot be fully sorted. Instead, they can be filtered by searching for a string with the following Sequel query:

SELECT * FROM $table WHERE <column name> LIKE '%<search string>%';

-- For example:
SELECT * FROM $table WHERE system_location LIKE '%land%';
Hide code cell content
from pathlib import Path
import yaml
import datapane as dp
import pandas as pd

software_attr_dir = Path("..", "..", "software_attributes")
model_list_inputs = yaml.safe_load( open(software_attr_dir / "database_list.yaml", "r") )
models = model_list_inputs["active"]

model_attributes_map = {
    model: yaml.safe_load( open(Path("..", "..", "software_attributes", "database", f"{model}.yaml"), "r") )
    for model in models
}

df = pd.DataFrame.from_dict(model_attributes_map, orient="index")
# print(list(df.columns))
# print(df)

General#

Hide code cell source
# Get all columns that begin with "does_"
does_columns = [col for col in df.columns if col.startswith("does_")]

# Make a list of all the "does_" columns that are True for each row dropping the "does_" prefix
# Add this to the dataframe
for i, row in df.iterrows():
    does_list = [col.replace("does_", "") for col in does_columns if row[col]]
    # print(f"{i}: {does_list}")
    df.at[i, "does"] = does_list

general_df = df[[
    "github_account",
    "github_repo",
    "does",
    "active_funding",
    "development_status",
    "programming_language",
    "license_type",
    "data_collection_methods",
    "last_release_date"
]]
dp.DataTable(general_df)
/opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages/datapane/common/df_processor.py:26: FutureWarning: pandas.Int64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.
  elif isinstance(df.index, pd.Int64Index):

Turbine Modeling#

Hide code cell source
turbine_df = df[[
    "scope",
    "system_location",
    "time_domain",
    "turbine_model",
    "does_loads",
    "does_design_optimization",
    "does_costs",
]]
turbine_df = turbine_df[ pd.DataFrame( turbine_df["scope"].tolist() ).isin( ["turbine", "any"] ).any(1).values ]
dp.DataTable(turbine_df)
/tmp/ipykernel_1909/3317172343.py:10: FutureWarning: In a future version of pandas all arguments of DataFrame.any and Series.any will be keyword-only.
  turbine_df = turbine_df[ pd.DataFrame( turbine_df["scope"].tolist() ).isin( ["turbine", "any"] ).any(1).values ]
/opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages/datapane/common/df_processor.py:26: FutureWarning: pandas.Int64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.
  elif isinstance(df.index, pd.Int64Index):

Farm Modeling#

Hide code cell source
farm_df = df[[
    "scope",
    "system_location",
    "time_domain",
    "turbine_model",
    "wake_model",
    "does_loads",
    "does_design_optimization",
    "does_costs",
]]
farm_df = farm_df[ pd.DataFrame( farm_df["scope"].tolist() ).isin( ["farm", "any"] ).any(1).values ]
dp.DataTable(farm_df.dropna())
/tmp/ipykernel_1909/2262452956.py:11: FutureWarning: In a future version of pandas all arguments of DataFrame.any and Series.any will be keyword-only.
  farm_df = farm_df[ pd.DataFrame( farm_df["scope"].tolist() ).isin( ["farm", "any"] ).any(1).values ]
/opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages/datapane/common/df_processor.py:26: FutureWarning: pandas.Int64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.
  elif isinstance(df.index, pd.Int64Index):

Cost Modeling#

Hide code cell source
cost_df = df[[
    "scope",
    "system_location",
    "does_design_optimization",
    "does_costs",
    "tags",
]]
cost_df = cost_df[ cost_df["does_costs"] == True]
dp.DataTable(cost_df.dropna())
/opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages/datapane/common/df_processor.py:26: FutureWarning: pandas.Int64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.
  elif isinstance(df.index, pd.Int64Index):

Full Suite Modeling Comparison#

Hide code cell source
modeling_df = df[[
    "scope",
    "system_location",
    "time_domain",
    "turbine_model",
    "wake_model",
    "does_controls",
    "does_costs",
    "does_data_analysis",
    "does_design",
    "does_design_optimization",
    "does_simulation",
    "does_loads",
    "tags",
]]
dp.DataTable(modeling_df)
/opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages/datapane/common/df_processor.py:26: FutureWarning: pandas.Int64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.
  elif isinstance(df.index, pd.Int64Index):

Distribution#

Hide code cell source
distribution_df = df[[
    "supported_platforms",
    "package_manager",
    "package_manager_url",
    "installation_complexity",
]]
dp.DataTable(distribution_df)
/opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages/datapane/common/df_processor.py:26: FutureWarning: pandas.Int64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.
  elif isinstance(df.index, pd.Int64Index):

Documentation#

Hide code cell source
documentation_df = df[[
    "documentation_url",
    "has_user_docs",
    "has_developer_docs",
    "has_api_docs",
    "has_cli_docs",
    "has_installation_docs",
    "has_getting_started_docs",
    "has_examples_tutorials",
    "has_design_intent_statement",
    "readability",
    "project_coverage",
]]
dp.DataTable(documentation_df)
/opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages/datapane/common/df_processor.py:26: FutureWarning: pandas.Int64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.
  elif isinstance(df.index, pd.Int64Index):

Testing#

Hide code cell source
testing_df = df[[
    "testing_framework",
    "continuous_testing",
    "test_coverage",
    "test_documentation",
    "performance_tests",
]]
dp.DataTable(testing_df)
/opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages/datapane/common/df_processor.py:26: FutureWarning: pandas.Int64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.
  elif isinstance(df.index, pd.Int64Index):

Interfaces#

Hide code cell source
interfaces_df = df[[
    "first_class_ui",
    "has_cli",
    "language_interfaces",
    "feature_accessibility",
]]
dp.DataTable(interfaces_df)
/opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages/datapane/common/df_processor.py:26: FutureWarning: pandas.Int64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.
  elif isinstance(df.index, pd.Int64Index):

Input / Output#

Hide code cell source
io_df = df[[
    "filetypes",
    "file_structure_stability",
]]
dp.DataTable(io_df)
/opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages/datapane/common/df_processor.py:26: FutureWarning: pandas.Int64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.
  elif isinstance(df.index, pd.Int64Index):