Skip to content

Instantly share code, notes, and snippets.

@hotchpotch
Last active August 9, 2021 06:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hotchpotch/1157c740df6fa0936d6f72e7f80bccaa to your computer and use it in GitHub Desktop.
Save hotchpotch/1157c740df6fa0936d6f72e7f80bccaa to your computer and use it in GitHub Desktop.
月平均労働時間計算.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "月平均労働時間計算.ipynb",
"provenance": [],
"collapsed_sections": [],
"toc_visible": true,
"authorship_tag": "ABX9TyMv7bQyCtNPZJJI2QsFxLkR",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/hotchpotch/1157c740df6fa0936d6f72e7f80bccaa/.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "4NgF8ryKRqHa"
},
"source": [
"! pip install -q jpholiday\n"
],
"execution_count": 1,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "j_Fnj1TcR2f9"
},
"source": [
"import jpholiday\n",
"from datetime import date\n",
"import pandas as pd\n",
"\n",
"def summarize_holiday(年間有給:int, 臨時休日:int, 一日労働時間: float, 年範囲=range(2010, 2030), 土日WEEKDAY={5,6}):\n",
" \"\"\"\n",
" 年間有給=有給の日数。10-20日の企業が多い\n",
" 臨時休日=夏休みや正月休暇など、年によるばらつきがあるが、3-6の企業が多い。\n",
" 一日労働時間=8時間の企業が多いが、6-7時間を所定の労働時間としている企業もある。\n",
" \"\"\"\n",
" summary = []\n",
" for 年 in 年範囲:\n",
" 年始 = date(年, 1, 1)\n",
" 年末 = date(年, 12, 31)\n",
" 祝日 = 0\n",
" 土日 = 0\n",
" 休日 = 0\n",
" date_range = pd.date_range(end = 年末, start = 年始).to_pydatetime().tolist()\n",
" for _date in date_range:\n",
" is_weekday = _date.weekday() in 土日WEEKDAY\n",
" is_jpholiday = jpholiday.is_holiday(_date)\n",
" if is_jpholiday:\n",
" 祝日 = 祝日 + 1\n",
" if is_weekday:\n",
" 土日 = 土日 + 1\n",
" if is_jpholiday or is_weekday:\n",
" 休日 = 休日 + 1\n",
" 日数 = len(date_range)\n",
" 合計休日 = 休日 + 年間有給 + 臨時休日\n",
" 労働日数 = 日数 - 合計休日\n",
" 労働時間 = 労働日数 * 一日労働時間\n",
" summary.append((年, 日数, 合計休日, 労働日数, 労働時間, round(労働時間/12, 2), 休日, 土日, 祝日))\n",
"\n",
" summary_df = pd.DataFrame(data=summary, columns = ['年', '日数', '合計休日', '労働日数', '労働時間', '月平均労働時間', '休日', '土日', '祝日'])\n",
" summary_df = summary_df.set_index('年')\n",
" return summary_df"
],
"execution_count": 2,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "0GnPUguxdZ8W"
},
"source": [
"from IPython.display import display\n",
"\n",
"def pp(*args, **kargs):\n",
" try:\n",
" display(pd.DataFrame(*args, **kargs))\n",
" except:\n",
" print(*args, **kargs)\n"
],
"execution_count": 3,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 710
},
"cellView": "form",
"id": "hpNVrxBgYTqD",
"outputId": "8b66c447-9bea-4d02-8d59-8f2eda58b15a"
},
"source": [
"#@title 一般的な企業の場合(年間有給15,臨時休日5,一日労働時間8)\n",
"\n",
"summary_df = summarize_holiday(年間有給=15, 臨時休日=5, 一日労働時間=8)\n",
"print('月平均労働時間平均', summary_df['月平均労働時間'].mean())\n",
"pp(summary_df)\n",
"\n",
"\n",
"\n"
],
"execution_count": 4,
"outputs": [
{
"output_type": "stream",
"text": [
"月平均労働時間平均 151.3005\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>日数</th>\n",
" <th>合計休日</th>\n",
" <th>労働日数</th>\n",
" <th>労働時間</th>\n",
" <th>月平均労働時間</th>\n",
" <th>休日</th>\n",
" <th>土日</th>\n",
" <th>祝日</th>\n",
" </tr>\n",
" <tr>\n",
" <th>年</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2010</th>\n",
" <td>365</td>\n",
" <td>139</td>\n",
" <td>226</td>\n",
" <td>1808</td>\n",
" <td>150.67</td>\n",
" <td>119</td>\n",
" <td>104</td>\n",
" <td>16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2011</th>\n",
" <td>365</td>\n",
" <td>139</td>\n",
" <td>226</td>\n",
" <td>1808</td>\n",
" <td>150.67</td>\n",
" <td>119</td>\n",
" <td>105</td>\n",
" <td>15</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012</th>\n",
" <td>366</td>\n",
" <td>136</td>\n",
" <td>230</td>\n",
" <td>1840</td>\n",
" <td>153.33</td>\n",
" <td>116</td>\n",
" <td>105</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2013</th>\n",
" <td>365</td>\n",
" <td>137</td>\n",
" <td>228</td>\n",
" <td>1824</td>\n",
" <td>152.00</td>\n",
" <td>117</td>\n",
" <td>104</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014</th>\n",
" <td>365</td>\n",
" <td>138</td>\n",
" <td>227</td>\n",
" <td>1816</td>\n",
" <td>151.33</td>\n",
" <td>118</td>\n",
" <td>104</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015</th>\n",
" <td>365</td>\n",
" <td>139</td>\n",
" <td>226</td>\n",
" <td>1808</td>\n",
" <td>150.67</td>\n",
" <td>119</td>\n",
" <td>104</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016</th>\n",
" <td>366</td>\n",
" <td>141</td>\n",
" <td>225</td>\n",
" <td>1800</td>\n",
" <td>150.00</td>\n",
" <td>121</td>\n",
" <td>105</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017</th>\n",
" <td>365</td>\n",
" <td>137</td>\n",
" <td>228</td>\n",
" <td>1824</td>\n",
" <td>152.00</td>\n",
" <td>117</td>\n",
" <td>105</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018</th>\n",
" <td>365</td>\n",
" <td>137</td>\n",
" <td>228</td>\n",
" <td>1824</td>\n",
" <td>152.00</td>\n",
" <td>117</td>\n",
" <td>104</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019</th>\n",
" <td>365</td>\n",
" <td>137</td>\n",
" <td>228</td>\n",
" <td>1824</td>\n",
" <td>152.00</td>\n",
" <td>117</td>\n",
" <td>104</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020</th>\n",
" <td>366</td>\n",
" <td>137</td>\n",
" <td>229</td>\n",
" <td>1832</td>\n",
" <td>152.67</td>\n",
" <td>117</td>\n",
" <td>104</td>\n",
" <td>15</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021</th>\n",
" <td>365</td>\n",
" <td>136</td>\n",
" <td>229</td>\n",
" <td>1832</td>\n",
" <td>152.67</td>\n",
" <td>116</td>\n",
" <td>104</td>\n",
" <td>13</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2022</th>\n",
" <td>365</td>\n",
" <td>140</td>\n",
" <td>225</td>\n",
" <td>1800</td>\n",
" <td>150.00</td>\n",
" <td>120</td>\n",
" <td>105</td>\n",
" <td>16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2023</th>\n",
" <td>365</td>\n",
" <td>138</td>\n",
" <td>227</td>\n",
" <td>1816</td>\n",
" <td>151.33</td>\n",
" <td>118</td>\n",
" <td>105</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2024</th>\n",
" <td>366</td>\n",
" <td>138</td>\n",
" <td>228</td>\n",
" <td>1824</td>\n",
" <td>152.00</td>\n",
" <td>118</td>\n",
" <td>104</td>\n",
" <td>21</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2025</th>\n",
" <td>365</td>\n",
" <td>139</td>\n",
" <td>226</td>\n",
" <td>1808</td>\n",
" <td>150.67</td>\n",
" <td>119</td>\n",
" <td>104</td>\n",
" <td>19</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2026</th>\n",
" <td>365</td>\n",
" <td>141</td>\n",
" <td>224</td>\n",
" <td>1792</td>\n",
" <td>149.33</td>\n",
" <td>121</td>\n",
" <td>104</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2027</th>\n",
" <td>365</td>\n",
" <td>140</td>\n",
" <td>225</td>\n",
" <td>1800</td>\n",
" <td>150.00</td>\n",
" <td>120</td>\n",
" <td>104</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2028</th>\n",
" <td>366</td>\n",
" <td>140</td>\n",
" <td>226</td>\n",
" <td>1808</td>\n",
" <td>150.67</td>\n",
" <td>120</td>\n",
" <td>106</td>\n",
" <td>16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2029</th>\n",
" <td>365</td>\n",
" <td>137</td>\n",
" <td>228</td>\n",
" <td>1824</td>\n",
" <td>152.00</td>\n",
" <td>117</td>\n",
" <td>104</td>\n",
" <td>19</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 日数 合計休日 労働日数 労働時間 月平均労働時間 休日 土日 祝日\n",
"年 \n",
"2010 365 139 226 1808 150.67 119 104 16\n",
"2011 365 139 226 1808 150.67 119 105 15\n",
"2012 366 136 230 1840 153.33 116 105 18\n",
"2013 365 137 228 1824 152.00 117 104 17\n",
"2014 365 138 227 1816 151.33 118 104 17\n",
"2015 365 139 226 1808 150.67 119 104 17\n",
"2016 366 141 225 1800 150.00 121 105 17\n",
"2017 365 137 228 1824 152.00 117 105 17\n",
"2018 365 137 228 1824 152.00 117 104 20\n",
"2019 365 137 228 1824 152.00 117 104 18\n",
"2020 366 137 229 1832 152.67 117 104 15\n",
"2021 365 136 229 1832 152.67 116 104 13\n",
"2022 365 140 225 1800 150.00 120 105 16\n",
"2023 365 138 227 1816 151.33 118 105 17\n",
"2024 366 138 228 1824 152.00 118 104 21\n",
"2025 365 139 226 1808 150.67 119 104 19\n",
"2026 365 141 224 1792 149.33 121 104 18\n",
"2027 365 140 225 1800 150.00 120 104 17\n",
"2028 366 140 226 1808 150.67 120 106 16\n",
"2029 365 137 228 1824 152.00 117 104 19"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 710
},
"cellView": "form",
"id": "BA0U4NpWc6Y2",
"outputId": "9ba3d61e-17e5-46d3-fbf9-6118e67713db"
},
"source": [
"#@title 労働時間が少ない企業の場合(年間有給20,臨時休日6,一日労働時間7)\n",
"\n",
"summary_df = summarize_holiday(年間有給=20, 臨時休日=6, 一日労働時間=7)\n",
"print('月平均労働時間平均', summary_df['月平均労働時間'].mean())\n",
"summary_df\n",
" "
],
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"text": [
"月平均労働時間平均 128.887\n"
],
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>日数</th>\n",
" <th>合計休日</th>\n",
" <th>労働日数</th>\n",
" <th>労働時間</th>\n",
" <th>月平均労働時間</th>\n",
" <th>休日</th>\n",
" <th>土日</th>\n",
" <th>祝日</th>\n",
" </tr>\n",
" <tr>\n",
" <th>年</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2010</th>\n",
" <td>365</td>\n",
" <td>145</td>\n",
" <td>220</td>\n",
" <td>1540</td>\n",
" <td>128.33</td>\n",
" <td>119</td>\n",
" <td>104</td>\n",
" <td>16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2011</th>\n",
" <td>365</td>\n",
" <td>145</td>\n",
" <td>220</td>\n",
" <td>1540</td>\n",
" <td>128.33</td>\n",
" <td>119</td>\n",
" <td>105</td>\n",
" <td>15</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2012</th>\n",
" <td>366</td>\n",
" <td>142</td>\n",
" <td>224</td>\n",
" <td>1568</td>\n",
" <td>130.67</td>\n",
" <td>116</td>\n",
" <td>105</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2013</th>\n",
" <td>365</td>\n",
" <td>143</td>\n",
" <td>222</td>\n",
" <td>1554</td>\n",
" <td>129.50</td>\n",
" <td>117</td>\n",
" <td>104</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014</th>\n",
" <td>365</td>\n",
" <td>144</td>\n",
" <td>221</td>\n",
" <td>1547</td>\n",
" <td>128.92</td>\n",
" <td>118</td>\n",
" <td>104</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2015</th>\n",
" <td>365</td>\n",
" <td>145</td>\n",
" <td>220</td>\n",
" <td>1540</td>\n",
" <td>128.33</td>\n",
" <td>119</td>\n",
" <td>104</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2016</th>\n",
" <td>366</td>\n",
" <td>147</td>\n",
" <td>219</td>\n",
" <td>1533</td>\n",
" <td>127.75</td>\n",
" <td>121</td>\n",
" <td>105</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2017</th>\n",
" <td>365</td>\n",
" <td>143</td>\n",
" <td>222</td>\n",
" <td>1554</td>\n",
" <td>129.50</td>\n",
" <td>117</td>\n",
" <td>105</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2018</th>\n",
" <td>365</td>\n",
" <td>143</td>\n",
" <td>222</td>\n",
" <td>1554</td>\n",
" <td>129.50</td>\n",
" <td>117</td>\n",
" <td>104</td>\n",
" <td>20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2019</th>\n",
" <td>365</td>\n",
" <td>143</td>\n",
" <td>222</td>\n",
" <td>1554</td>\n",
" <td>129.50</td>\n",
" <td>117</td>\n",
" <td>104</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2020</th>\n",
" <td>366</td>\n",
" <td>143</td>\n",
" <td>223</td>\n",
" <td>1561</td>\n",
" <td>130.08</td>\n",
" <td>117</td>\n",
" <td>104</td>\n",
" <td>15</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2021</th>\n",
" <td>365</td>\n",
" <td>142</td>\n",
" <td>223</td>\n",
" <td>1561</td>\n",
" <td>130.08</td>\n",
" <td>116</td>\n",
" <td>104</td>\n",
" <td>13</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2022</th>\n",
" <td>365</td>\n",
" <td>146</td>\n",
" <td>219</td>\n",
" <td>1533</td>\n",
" <td>127.75</td>\n",
" <td>120</td>\n",
" <td>105</td>\n",
" <td>16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2023</th>\n",
" <td>365</td>\n",
" <td>144</td>\n",
" <td>221</td>\n",
" <td>1547</td>\n",
" <td>128.92</td>\n",
" <td>118</td>\n",
" <td>105</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2024</th>\n",
" <td>366</td>\n",
" <td>144</td>\n",
" <td>222</td>\n",
" <td>1554</td>\n",
" <td>129.50</td>\n",
" <td>118</td>\n",
" <td>104</td>\n",
" <td>21</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2025</th>\n",
" <td>365</td>\n",
" <td>145</td>\n",
" <td>220</td>\n",
" <td>1540</td>\n",
" <td>128.33</td>\n",
" <td>119</td>\n",
" <td>104</td>\n",
" <td>19</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2026</th>\n",
" <td>365</td>\n",
" <td>147</td>\n",
" <td>218</td>\n",
" <td>1526</td>\n",
" <td>127.17</td>\n",
" <td>121</td>\n",
" <td>104</td>\n",
" <td>18</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2027</th>\n",
" <td>365</td>\n",
" <td>146</td>\n",
" <td>219</td>\n",
" <td>1533</td>\n",
" <td>127.75</td>\n",
" <td>120</td>\n",
" <td>104</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2028</th>\n",
" <td>366</td>\n",
" <td>146</td>\n",
" <td>220</td>\n",
" <td>1540</td>\n",
" <td>128.33</td>\n",
" <td>120</td>\n",
" <td>106</td>\n",
" <td>16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2029</th>\n",
" <td>365</td>\n",
" <td>143</td>\n",
" <td>222</td>\n",
" <td>1554</td>\n",
" <td>129.50</td>\n",
" <td>117</td>\n",
" <td>104</td>\n",
" <td>19</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 日数 合計休日 労働日数 労働時間 月平均労働時間 休日 土日 祝日\n",
"年 \n",
"2010 365 145 220 1540 128.33 119 104 16\n",
"2011 365 145 220 1540 128.33 119 105 15\n",
"2012 366 142 224 1568 130.67 116 105 18\n",
"2013 365 143 222 1554 129.50 117 104 17\n",
"2014 365 144 221 1547 128.92 118 104 17\n",
"2015 365 145 220 1540 128.33 119 104 17\n",
"2016 366 147 219 1533 127.75 121 105 17\n",
"2017 365 143 222 1554 129.50 117 105 17\n",
"2018 365 143 222 1554 129.50 117 104 20\n",
"2019 365 143 222 1554 129.50 117 104 18\n",
"2020 366 143 223 1561 130.08 117 104 15\n",
"2021 365 142 223 1561 130.08 116 104 13\n",
"2022 365 146 219 1533 127.75 120 105 16\n",
"2023 365 144 221 1547 128.92 118 105 17\n",
"2024 366 144 222 1554 129.50 118 104 21\n",
"2025 365 145 220 1540 128.33 119 104 19\n",
"2026 365 147 218 1526 127.17 121 104 18\n",
"2027 365 146 219 1533 127.75 120 104 17\n",
"2028 366 146 220 1540 128.33 120 106 16\n",
"2029 365 143 222 1554 129.50 117 104 19"
]
},
"metadata": {
"tags": []
},
"execution_count": 5
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment