Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Roelofsen, Hans
benb_utils
Commits
019d30d0
Commit
019d30d0
authored
Aug 24, 2021
by
Roelofsen, Hans
Browse files
csv tools in dedicated file
parent
11c9db32
Changes
2
Hide whitespace changes
Inline
Side-by-side
benb.py
View file @
019d30d0
...
...
@@ -27,68 +27,6 @@ def rand_web_color_hex():
return
"#{}"
.
format
(
rgb
)
def
fix_bt
(
code_in
,
as_mnp
=
False
):
"""
Parser for Beheertype codes to repair abbreviated codes and/or MNP extension
eg. 02.01 --> N02.01 if as_mnp==False
02.01 --> N01.01.00 if as_mnp==True
N05.01 --> N05.01 if as_mnp==False
N05.01 --> N05.01.00 if as_mnp==True
N04.02.01 --> N04.02.01 if as_mnp==False
N04.02.01 --> N04.02.01 if as_mnp==True
BT Code is as follows <N><AA>.<BB>.<CC>
N = letter, may be missing
A = two digits indicating top level beheertype "TOP"
B = two digits indicating sub level beheertype "SUB"
C = two digits indicating neergeschaald beheertype if > 00. Else "00" as used in MNP param notation "NEER"
N04.02.00 is equivalent to N04.02
:param code_in: beheertypecode in any format
:param as_mnp: return MNP style beheertypecode, default=False
:return: beheertypecode
"""
if
isinstance
(
code_in
,
numbers
.
Number
):
code_in
=
str
(
code_in
)
# Identify parts of code
parts
=
code_in
.
split
(
"."
)
if
len
(
parts
)
==
1
:
raise
Exception
(
"Unexpected BT code: {}"
.
format
(
code_in
))
elif
len
(
parts
)
==
2
:
top
,
sub
=
parts
neer
=
None
elif
len
(
parts
)
==
3
:
top
,
sub
,
neer
=
parts
# Verify TOP and add "N" is required
if
top
.
isdigit
():
top
=
"N{0}"
.
format
(
top
.
zfill
(
2
))
else
:
assert
top
[
0
].
isupper
(),
"Unexpected BT Code format: {}"
.
format
(
code_in
)
# Verify SUB
assert
sub
.
isdigit
and
len
(
sub
)
==
2
,
"Unexpected BT Code format: {}"
.
format
(
code_in
)
# Verify NEER and check if it is neergeschaald or not
keep_neer
=
False
if
neer
:
assert
neer
.
isdigit
and
len
(
neer
)
==
2
,
"Unexpected BT Code format: {}"
.
format
(
code_in
)
if
int
(
neer
)
>
0
:
keep_neer
=
True
# Construct output
head
=
"{}.{}"
.
format
(
top
,
sub
)
if
keep_neer
:
return
"{}.{}"
.
format
(
head
,
neer
)
elif
as_mnp
:
return
"{}.00"
.
format
(
head
)
else
:
return
head
def
pnt2square_id
(
east_north
,
size
,
of
=
"full"
):
"""
Used to slot a point into a geographical square based on its coordinates.
...
...
@@ -129,21 +67,6 @@ def pnt2square_id(east_north, size, of="full"):
raise
def
draagkracht_ww
(
frequentie
,
trouw
,
th
):
"""
Draagkracht formule volgens Wieger Wamelink. Zie MS Teams discussie 16-07-2020 MNP2020/Fase 7 Objectivering Draagk..
:param frequentie: gemiddelde frequentie van soort X binnen beheertype Y
:param trouw: gemiddelde trouw van soort X binnen beheertype Y
:param th: minumum draagkracht value
:return: draagkracht soort X - beheertype Y combinatie, gemaximaliseerd tot 1.
"""
dk
=
np
.
min
([
np
.
multiply
(
np
.
divide
(
np
.
max
([
frequentie
,
trouw
]),
100
),
5
),
1
])
if
dk
>=
th
:
return
dk
else
:
return
np
.
nan
def
gen_squares
(
x_ul
,
y_ul
,
nrow
,
ncol
,
size
):
"""
Generate geodataframe with square polygons
...
...
@@ -225,64 +148,6 @@ def colrow2xy(colrow, rio_object=None, affine_in=None):
return
x
,
y
def
csv_combine
(
files
,
identifiers
,
identifiercolumn
=
"df_id"
):
"""
appends one table to another while adding a column to identify which entries came from each table
:param files: list of csv files
:param identifiers: list of labels to identify original tables
:param: identifiercolumn: name of identifiercolumn
:return
"""
if
not
isinstance
(
files
,
list
)
or
not
isinstance
(
identifiers
,
list
):
raise
Exception
(
"Either files or identifiers is not a list"
)
for
file
in
files
:
if
not
os
.
path
.
exists
(
file
):
raise
Exception
(
file
+
" was not found!"
)
df_combined
=
pd
.
read_csv
(
files
[
0
])
df_combined
[
identifiercolumn
]
=
identifiers
[
0
]
for
file
,
identifier
in
zip
(
files
[
1
:],
identifiers
[
1
:]):
nextfile
=
pd
.
read_csv
(
file
)
nextfile
[
identifiercolumn
]
=
identifier
df_combined
=
df_combined
.
append
(
nextfile
)
return
df_combined
def
mnp_csvlister
(
folder
,
notwanted
=
False
,
extension
=
False
):
"""
list all species output csv files in an MNP result folder
you can provida a list of species that you want to exclude from te returned list
:param folder: MNP result folder
:param notwanted: list of species to exclude
:param extension: return file extensions?
:return: list containing filenames or species codes
"""
if
type
(
notwanted
)
!=
bool
:
try
:
file_list
=
[
file
for
file
in
os
.
listdir
(
folder
)
if
not
(
np
.
isin
(
file
[
0
:
9
],
notwanted
))
]
file_list
.
sort
()
except
Exception
as
e
:
print
(
e
)
next
else
:
file_list
=
[
file
for
file
in
os
.
listdir
(
folder
)]
file_list
.
sort
()
if
not
extension
:
file_list
=
[
f
[
0
:
9
]
for
f
in
file_list
]
file_list
=
list
(
set
([
s
for
s
in
file_list
if
s
[:
2
]
==
"S0"
]))
file_list
.
sort
()
return
file_list
def
progress_bar
(
iterable
,
prefix
=
''
,
suffix
=
''
,
decimals
=
1
,
length
=
100
,
fill
=
'#'
,
printEnd
=
"
\r
"
):
"""
...
...
csv_tools.py
0 → 100644
View file @
019d30d0
import
os
import
pandas
as
pd
import
numpy
as
np
def
csv_combine
(
files
,
identifiers
,
identifiercolumn
=
"df_id"
):
"""
appends one table to another while adding a column to identify which entries came from each table
:param files: list of csv files
:param identifiers: list of labels to identify original tables
:param: identifiercolumn: name of identifiercolumn
:return
"""
if
not
isinstance
(
files
,
list
)
or
not
isinstance
(
identifiers
,
list
):
raise
Exception
(
"Either files or identifiers is not a list"
)
for
file
in
files
:
if
not
os
.
path
.
exists
(
file
):
raise
Exception
(
file
+
" was not found!"
)
df_combined
=
pd
.
read_csv
(
files
[
0
])
df_combined
[
identifiercolumn
]
=
identifiers
[
0
]
for
file
,
identifier
in
zip
(
files
[
1
:],
identifiers
[
1
:]):
nextfile
=
pd
.
read_csv
(
file
)
nextfile
[
identifiercolumn
]
=
identifier
df_combined
=
df_combined
.
append
(
nextfile
)
return
df_combined
def
mnp_csvlister
(
folder
,
notwanted
=
False
,
extension
=
False
):
"""
list all species output csv files in an MNP result folder
you can provida a list of species that you want to exclude from te returned list
:param folder: MNP result folder
:param notwanted: list of species to exclude
:param extension: return file extensions?
:return: list containing filenames or species codes
"""
if
type
(
notwanted
)
!=
bool
:
try
:
file_list
=
[
file
for
file
in
os
.
listdir
(
folder
)
if
not
(
np
.
isin
(
file
[
0
:
9
],
notwanted
))
]
file_list
.
sort
()
except
Exception
as
e
:
print
(
e
)
next
else
:
file_list
=
[
file
for
file
in
os
.
listdir
(
folder
)]
file_list
.
sort
()
if
not
extension
:
file_list
=
[
f
[
0
:
9
]
for
f
in
file_list
]
file_list
=
list
(
set
([
s
for
s
in
file_list
if
s
[:
2
]
==
"S0"
]))
file_list
.
sort
()
return
file_list
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment