<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Questions
Which types / classes have unwanted dependencies in our code?
Which group of types / classes is highly cohesive but lowly coupled?
Idea
Using JDK's jdeps command line utility, we can extract the existing dependencies between Java types
Step1:  Modeling
Extract the information about existing modules based on path naming conventions
Step2:  Visualization
Output results with <b>A</b>n <b>U</b>nified <b>S</b>oftware <b>I</b>ntegrator
<ASSISTANT_TASK:>
Python Code:
from ozapfdis import jdeps
deps = jdeps.read_jdeps_file(
    "../dataset/jdeps_dropover.txt",
    filter_regex="at.dropover")
deps.head()
Explanation: Questions
Which types / classes have unwanted dependencies in our code?
Which group of types / classes is highly cohesive but lowly coupled?
Idea
Using JDK's jdeps command line utility, we can extract the existing dependencies between Java types:
bash
jdeps -v dropover-classes.jar &gt; jdeps.txt
Data
Read data in with <b>O</b>pen <b>Z</b>ippy <b>A</b>nalysis <b>P</b>latform <b>F</b>or <b>D</b>ata <b>I</b>n <b>S</b>oftware
End of explanation
deps = deps[['from', 'to']]
deps['group_from'] = deps['from'].str.split(".").str[2]
deps['group_to'] = deps['to'].str.split(".").str[2]
deps.head()
Explanation: Modeling
Extract the information about existing modules based on path naming conventions
End of explanation
from ausi import d3
d3.create_d3force(
    deps,
    "jdeps_demo_output/dropover_d3forced",
    group_col_from="group_from",
    group_col_to="group_to")
d3.create_semantic_substrate(
    deps,
    "jdeps_demo_output/dropover_semantic_substrate")
d3.create_hierarchical_edge_bundling(
    deps,
    "jdeps_demo_output/dropover_bundling")
Explanation: Visualization
Output results with <b>A</b>n <b>U</b>nified <b>S</b>oftware <b>I</b>ntegrator
End of explanation
<END_TASK>