# 分析資料 ```python import psycopg2 import pandas as pd conn = psycopg2.connect(database="mydb", user="test01", password="testpw", host="localhost", port="5432") print(conn.closed) ## 允許python執行postgresql語法 with conn.cursor() as cur: ## 觀察查詢筆數 print(cur.rowcount) ## SQL語法 sql = "select * from public.salary_max" ## 執行sql語法 cur.execute(sql) ## 取得欄位名稱 name = [desc[0] for desc in cur.description] ## fetchall是將所有收尋的資料都寫入 rows 中 # rows = pd.DataFrame(cur.fetchall()) rows = pd.DataFrame(cur.fetchall(),columns=name) ## 取出一筆資料 # rows = pd.DataFrame(cur.fetchone()) ## 自行設定要幾筆資料 # rows = pd.DataFrame(cur.fetchmany(10)) ## 觀察查詢筆數 print(cur.rowcount) print(rows.shape) rows.head() ``` 0 -1 800 (800, 6) <div> <style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </style> <table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th></th> <th>check_n</th> <th>id</th> <th>date</th> <th>clock_in</th> <th>clock_out</th> <th>salary</th> </tr> </thead> <tbody> <tr> <td>0</td> <td>1</td> <td>3686</td> <td>2021-06-26</td> <td>07:22:30</td> <td>22:03:39</td> <td>64716969172</td> </tr> <tr> <td>1</td> <td>2</td> <td>3686</td> <td>2021-06-10</td> <td>06:27:32</td> <td>17:43:58</td> <td>9572746424</td> </tr> <tr> <td>2</td> <td>3</td> <td>3686</td> <td>2021-06-26</td> <td>10:23:31</td> <td>19:54:49</td> <td>50535635106</td> </tr> <tr> <td>3</td> <td>4</td> <td>3686</td> <td>2021-06-06</td> <td>09:25:13</td> <td>17:57:49</td> <td>57455281008</td> </tr> <tr> <td>4</td> <td>5</td> <td>3686</td> <td>2021-06-20</td> <td>10:17:18</td> <td>22:21:48</td> <td>83254690126</td> </tr> </tbody> </table> </div> ```python import seaborn as sns ax = sns.boxplot(x="salary", y="id", data=rows,orient="h") ax ``` <matplotlib.axes._subplots.AxesSubplot at 0x7fad5864f790> ![png](output_2_1.png) ```python import matplotlib.pyplot as plt ax = sns.lineplot(x='date', y='salary', data=rows) plt.xticks(rotation=90) ax ``` <matplotlib.axes._subplots.AxesSubplot at 0x7fad598b8d10> ![png](output_3_1.png) ```python def diff_times_in_seconds(t1, t2): # caveat emptor - assumes t1 & t2 are python times, on the same day and t2 is after t1 h1, m1, s1 = t1.hour, t1.minute, t1.second h2, m2, s2 = t2.hour, t2.minute, t2.second t1_secs = s1 + 60 * (m1 + 60*h1) t2_secs = s2 + 60 * (m2 + 60*h2) return( t2_secs - t1_secs)/3600 ``` ```python ## 時間計算, 以小時為單位 diff_times_in_seconds(rows.clock_in[0],rows.clock_out[0]) ``` 14.685833333333333 ```python time = [] for n in range(len(rows)): time.append(diff_times_in_seconds(rows.clock_in[n],rows.clock_out[n])) time ``` [14.685833333333333, 11.273888888888889, 9.521666666666667, 8.543333333333333, 12.075, 13.412222222222223, 12.104166666666666, 11.917222222222222, -10.634722222222223, 11.295833333333333, 11.406666666666666, 8.703055555555556, 10.949444444444444, 6.372777777777777, -11.818055555555556, 14.944166666666666, 14.8675, 11.337777777777777, 15.385555555555555, 17.496388888888887, -11.415833333333333, 17.024444444444445, 11.016666666666667, 12.98, 11.93388888888889, 18.089444444444446, 22.374444444444446, 11.3225, 12.765833333333333, 13.960555555555555, 7.5072222222222225, 10.051666666666666, 12.272222222222222, -12.580277777777777, 9.671111111111111, 5.010277777777778, 5.325277777777778, 12.049166666666666, 21.58888888888889, -9.086944444444445, 5.045277777777778, -9.291944444444445, 14.453055555555556, 12.806944444444444, 8.488888888888889, -11.151388888888889, 12.859166666666667, 14.856944444444444, 7.265, 10.9725, 14.345, 14.516666666666667, 11.054444444444444, 15.639166666666666, 11.19, 14.042777777777777, 14.198611111111111, 14.963333333333333, 16.136388888888888, 12.465833333333334, 8.749444444444444, 7.360833333333333, 9.155555555555555, 13.191666666666666, 8.99638888888889, 7.051666666666667, -12.640277777777778, 15.372777777777777, 8.752777777777778, 10.678611111111111, -8.126944444444444, 15.08388888888889, 16.038333333333334, -10.9675, -6.867222222222222, 8.241388888888888, 4.825277777777778, -12.28888888888889, 7.575833333333334, 15.691666666666666, 6.078055555555555, 12.875555555555556, 11.471111111111112, 18.23138888888889, 7.412222222222222, 11.359722222222222, -11.888333333333334, 12.123611111111112, 8.264722222222222, 9.126388888888888, 9.735833333333334, 10.508611111111112, 8.908611111111112, 11.931944444444444, -12.699166666666667, 6.0055555555555555, 6.3405555555555555, 9.919444444444444, 8.382777777777777, 8.219166666666666, -9.619166666666667, 12.676388888888889, -10.530833333333334, 6.001111111111111, 18.458333333333332, 16.0075, 9.115277777777777, 9.074166666666667, 12.964166666666667, 9.123055555555556, 16.362222222222222, 15.711944444444445, 9.094444444444445, 6.46, 18.761666666666667, 11.597222222222221, 10.977777777777778, -12.901666666666667, 12.505, 14.869166666666667, 13.956666666666667, -12.621944444444445, 12.088333333333333, 11.217777777777778, 15.796666666666667, 16.488333333333333, 9.605833333333333, 9.937777777777777, 13.764166666666666, 7.2572222222222225, 5.808055555555556, -10.764722222222222, -9.375555555555556, 18.08888888888889, -10.714444444444444, 11.285277777777777, 11.18388888888889, 9.52361111111111, 10.777222222222223, 12.62888888888889, -6.062222222222222, 10.114722222222222, 13.335, 9.316666666666666, 13.32611111111111, -7.695277777777778, 16.380277777777778, 8.221944444444444, 6.043611111111111, 15.259722222222223, 12.991944444444444, 18.658055555555556, 14.413333333333334, 13.324444444444444, -9.942777777777778, 8.487777777777778, 8.5325, 10.987222222222222, 17.52611111111111, 12.35, 7.473333333333334, -6.228611111111111, 7.072222222222222, 9.51361111111111, 15.686388888888889, 11.08361111111111, 6.915, -12.979444444444445, 9.995555555555555, 10.931111111111111, -6.702222222222222, 12.841111111111111, 13.936666666666667, -7.095277777777778, 15.939166666666667, 10.41638888888889, -12.599722222222223, -5.683888888888889, 9.5275, 16.586666666666666, 15.693055555555556, 6.990555555555556, 14.6775, 11.618611111111111, 13.788611111111111, 6.261666666666667, 14.3675, 13.800277777777778, 16.365555555555556, -5.248611111111111, 12.246944444444445, 14.534166666666666, 13.988611111111112, 13.331388888888888, 10.400277777777777, 10.117777777777778, 14.3975, 17.369444444444444, -11.195555555555556, 11.364166666666666, 8.671944444444444, 11.074166666666667, -12.59388888888889, 10.14, 13.993333333333334, -10.526111111111112, 11.305277777777778, -10.1275, 13.509722222222223, -11.618055555555555, 6.852222222222222, -5.852222222222222, 12.381944444444445, 12.294722222222223, -9.514166666666666, -7.46, -7.887777777777778, 6.560555555555555, -6.976666666666667, 4.8661111111111115, -8.398333333333333, 7.938888888888889, -12.206944444444444, -6.687777777777778, 11.723055555555556, 8.977222222222222, 9.120833333333334, 10.921944444444444, 20.958055555555557, 12.375277777777777, 12.25361111111111, 12.693055555555556, 13.450555555555555, 11.207777777777778, 7.3052777777777775, -11.92361111111111, 15.56638888888889, 11.935277777777777, 11.852222222222222, 10.751944444444444, -12.712777777777777, 12.738611111111112, 18.13277777777778, 6.896388888888889, 12.346666666666666, 9.811666666666667, 13.363055555555556, 11.45, 12.873888888888889, -8.896944444444445, 13.029722222222222, 6.303333333333334, 13.065277777777778, 10.876111111111111, 12.6825, 10.726666666666667, -11.841666666666667, 9.600555555555555, -9.32611111111111, 11.968055555555555, 12.561666666666667, 7.926666666666667, 7.8825, 14.831666666666667, 10.901666666666667, 9.167222222222222, 10.326666666666666, 10.308055555555555, 0.0, 14.935833333333333, 14.292222222222222, 13.166944444444445, 17.863611111111112, 16.23, 11.130277777777778, 17.09722222222222, -8.040833333333333, 8.364444444444445, 8.827222222222222, 13.62861111111111, 14.169166666666667, 14.815555555555555, -7.294444444444444, 14.45861111111111, 11.078333333333333, -7.819166666666667, 16.06972222222222, 8.803333333333333, 9.551666666666666, 7.004166666666666, 14.181111111111111, 13.260833333333334, 10.355555555555556, 13.71111111111111, 8.804166666666667, 11.920555555555556, 6.651944444444444, 10.543055555555556, 10.062222222222223, 9.594444444444445, 8.071111111111112, 14.274166666666666, 14.768888888888888, 7.201388888888889, 10.485, 18.469722222222224, 15.456111111111111, 11.391388888888889, 13.760833333333334, -11.766944444444444, 8.614166666666666, 6.536111111111111, 6.904722222222222, 12.463611111111112, 6.19, -9.556111111111111, 17.531666666666666, 9.704722222222221, 12.213333333333333, 10.028333333333334, 9.890277777777778, 14.985277777777778, 11.701666666666666, 16.453333333333333, -7.905833333333334, 13.552777777777777, 12.697777777777778, 15.159166666666666, 12.401111111111112, 10.373611111111112, 6.771944444444444, 14.226944444444445, -12.542777777777777, 12.09361111111111, 15.230277777777777, 14.405, 13.62888888888889, 17.7875, 5.867222222222222, 11.400833333333333, 9.26, 12.178333333333333, -7.323611111111111, 8.525, 17.387777777777778, 13.171944444444444, 12.592222222222222, 13.625555555555556, 7.805, 12.374722222222223, 9.716666666666667, 6.882777777777778, 8.35, 9.33611111111111, 8.972222222222221, -6.428333333333334, 11.886388888888888, 11.0475, 8.132777777777777, 10.076666666666666, 11.277222222222223, 17.183055555555555, 8.47, 7.535277777777778, 10.249444444444444, 4.76, 14.482222222222223, 8.917222222222222, -5.8675, 0.0, 11.785277777777777, 18.2625, 8.908888888888889, 14.140555555555556, 9.210555555555555, 5.088611111111111, 14.069722222222222, 10.474722222222223, 10.894722222222223, 11.932222222222222, 11.68361111111111, 9.036944444444444, 11.654722222222222, -7.406944444444444, 13.235833333333334, 17.345277777777778, 13.722777777777777, 19.386666666666667, 10.032777777777778, -11.878333333333334, 8.701944444444445, 8.314722222222223, 12.774722222222222, -12.105555555555556, 12.435833333333333, 16.581944444444446, -9.364444444444445, 9.756388888888889, 17.835277777777776, 11.402777777777779, 23.196944444444444, 17.252777777777776, 10.728333333333333, 11.286666666666667, -7.7316666666666665, -10.624166666666667, 15.470555555555556, 8.041944444444445, 14.755, 9.163055555555555, 14.895277777777778, 8.904166666666667, 12.728055555555555, 13.970555555555556, 8.182777777777778, 13.793055555555556, -12.976111111111111, -6.509444444444444, -12.185555555555556, 11.621666666666666, 13.782222222222222, 13.779166666666667, 6.911111111111111, 15.395277777777778, 6.8694444444444445, 9.1525, 8.780833333333334, 14.903888888888888, 10.091388888888888, 12.075, 13.73611111111111, 9.495555555555555, -9.86, 13.149722222222222, 12.054444444444444, 16.19527777777778, -7.491944444444444, 10.046666666666667, 14.246666666666666, 8.810833333333333, 13.275277777777777, -7.238611111111111, 22.551111111111112, 6.463055555555556, 10.948611111111111, 8.790277777777778, 11.033611111111112, 14.5025, 10.600833333333334, 9.424444444444445, 14.497777777777777, 12.815833333333334, 13.119166666666667, 12.671111111111111, 10.502777777777778, 9.816666666666666, 16.981666666666666, 10.779722222222222, -8.770833333333334, 13.2475, 10.806111111111111, 11.559444444444445, 12.205555555555556, -5.925833333333333, 17.86111111111111, 13.66611111111111, 12.09361111111111, 12.771944444444445, 12.230277777777777, 11.74388888888889, 12.23, 6.581944444444445, 6.663333333333333, 11.354444444444445, 13.673333333333334, 15.29888888888889, 11.27111111111111, 9.044722222222223, 11.606944444444444, 8.485555555555555, 0.0, 8.695, 5.763333333333334, 12.43, 8.665555555555555, 14.799166666666666, 7.839722222222222, 5.8625, 9.7425, 8.70111111111111, 15.549722222222222, -11.2175, 0.0, 5.603888888888889, 10.64861111111111, 12.8125, -5.465833333333333, 10.5225, 14.741388888888888, 17.0725, -5.901111111111111, 13.895, 10.727777777777778, 15.057222222222222, 19.04138888888889, 12.365555555555556, 16.135277777777777, 12.703611111111112, 9.03111111111111, 15.126111111111111, 9.750833333333333, 12.131666666666666, -9.2975, -12.378055555555555, 15.866666666666667, 14.416944444444445, -11.445277777777777, 10.506944444444445, 10.474444444444444, 12.092777777777778, 7.168888888888889, 7.135277777777778, 14.171111111111111, 13.030277777777778, 20.1425, 11.12888888888889, 12.1275, 9.020555555555555, 16.144166666666667, 9.915555555555555, 18.720277777777778, 11.756388888888889, 11.299166666666666, -11.386111111111111, 9.34361111111111, 23.219166666666666, 6.8116666666666665, -12.926944444444445, 10.896944444444445, 11.078333333333333, 8.164444444444445, 6.736111111111111, 9.765, 21.655555555555555, 9.69138888888889, 12.968333333333334, -10.51, 13.385277777777778, 9.701944444444445, -11.959444444444445, 11.590277777777779, 11.376111111111111, -6.182777777777778, 9.334722222222222, 10.062777777777777, -11.356666666666667, -9.696388888888889, -7.179444444444444, 11.290833333333333, 13.009166666666667, 12.85361111111111, -6.564444444444445, 8.329166666666667, 15.324166666666667, 7.823888888888889, 11.2575, -9.344444444444445, 9.100277777777778, -7.288333333333333, 11.341111111111111, 18.04388888888889, 6.651388888888889, 11.45861111111111, 13.921666666666667, 7.988888888888889, 11.247777777777777, 9.864722222222222, 10.31861111111111, 10.140277777777778, -8.709722222222222, -9.06861111111111, 14.395833333333334, -12.82611111111111, 11.408055555555556, 6.628888888888889, 11.810277777777777, -9.853333333333333, 13.060277777777777, 5.972222222222222, 10.043333333333333, 6.808611111111111, 8.368611111111111, 11.236666666666666, 13.602777777777778, 15.566666666666666, 12.651111111111112, -7.161944444444444, -8.750277777777777, 7.67, 12.793611111111112, -9.840277777777779, 14.4, 14.743611111111111, 17.52166666666667, 8.360277777777778, 10.990555555555556, 13.52111111111111, -6.769166666666667, 9.306666666666667, 10.705555555555556, -10.063611111111111, 11.194166666666666, -9.48, -7.155, 9.875, 13.037222222222223, 12.677222222222222, 12.490277777777777, -11.44361111111111, 6.29, 6.940555555555555, 11.308333333333334, 13.860277777777778, 14.942777777777778, 13.2775, 8.235555555555555, 0.0, 12.415277777777778, 15.689444444444444, 11.042222222222222, 13.539444444444445, 7.982222222222222, 10.554722222222223, 8.14861111111111, 12.178055555555556, 11.573611111111111, 5.683888888888889, 8.37, 5.381388888888889, 7.541388888888889, 11.385555555555555, 23.22, 9.665833333333333, 0.0, 22.55388888888889, 17.68777777777778, 9.995, 11.916944444444445, 9.834444444444445, 10.004166666666666, 12.018333333333333, 12.431944444444444, 17.46527777777778, -7.4975, 18.140555555555554, 13.65, 12.805555555555555, 11.623055555555556, 16.463333333333335, 9.864166666666666, -12.093333333333334, 5.3694444444444445, 10.258611111111112, 10.963888888888889, 23.088333333333335, 8.430277777777778, 6.790277777777778, 14.194722222222222, 8.23611111111111, 5.3341666666666665, 13.866666666666667, 13.740277777777777, 10.713333333333333, 6.861666666666666, 11.675833333333333, 8.846666666666666, 13.196388888888889, 12.179444444444444, 6.434722222222222, 9.793333333333333, 12.493055555555555, 23.974444444444444, -12.399166666666666, 8.2125, 14.933333333333334, -5.111666666666666, -8.890833333333333, 13.985, 7.776111111111111, 10.942222222222222, 10.7725, -9.607777777777779, 11.504166666666666, 12.855277777777777, 5.607222222222222, 12.94361111111111, 12.483333333333333, 14.304444444444444, 11.705277777777777, 8.163611111111111, 8.284722222222221, 17.635833333333334, 10.141666666666667, -11.87111111111111, 12.548055555555555, 8.254444444444445, 5.923055555555556, 16.60527777777778, 23.194444444444443, -8.773888888888889, 7.764166666666667, 8.81611111111111, 12.3875, 13.240833333333333, 8.916666666666666, 12.347222222222221, 6.091666666666667, -11.491388888888888, 11.785277777777777, 15.096944444444444, 8.2375, 14.373333333333333, 6.836388888888889, 5.350555555555555, 10.63111111111111, -10.276388888888889, -5.364166666666667, 10.196944444444444, 9.735, 11.977777777777778, 8.669444444444444, 13.231111111111112, 14.214722222222223, 14.597222222222221, -8.626944444444444, -9.146666666666667, 12.875555555555556, 12.963333333333333, 14.268888888888888, -5.573333333333333, 15.558333333333334, 12.589722222222223, 8.921111111111111, 11.885555555555555, 12.403055555555556, 11.135555555555555, 6.600833333333333, 14.400833333333333, 18.176111111111112, 10.12861111111111, 10.952777777777778, 13.622222222222222, 11.874444444444444, -11.854166666666666, 9.8975, 9.181666666666667, 11.818333333333333, 15.358333333333333, 10.195, 4.695277777777778, 21.51638888888889, 8.099722222222223, 14.635, 8.672222222222222, -5.976388888888889, 11.780833333333334, 16.02111111111111, 19.779444444444444, 10.63888888888889, 12.399722222222222, 9.054444444444444, 8.297222222222222, -12.65638888888889, 8.29861111111111, 13.212777777777777, 9.099444444444444, 9.085833333333333, 12.522777777777778, -8.76361111111111, 10.44138888888889, 11.450833333333334, 8.86888888888889, 8.930277777777778, 11.164444444444445, 11.280277777777778, 7.909166666666667, 8.622777777777777, 13.290833333333333, 13.3525, -7.217222222222222, 11.765277777777778, 9.736666666666666, 10.56, 15.9625, 13.266666666666667, -10.174166666666666, 16.925, 10.731388888888889, 13.188611111111111, 10.9175] ```python rows.iloc[8] ``` check_n 9 id 3686 date 2021-06-07 clock_in 10:38:05 clock_out 00:00:00 salary 79893629039 Name: 8, dtype: object ```python rows1 = [] for n in range(len(rows)): if rows.clock_in[n].hour != 0 and rows.clock_out[n].hour != 0: rows1.append(rows.iloc[n]) rows1 = pd.DataFrame(rows1,index=range(len(rows1))) rows1.head() ``` <div> <style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </style> <table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th></th> <th>check_n</th> <th>id</th> <th>date</th> <th>clock_in</th> <th>clock_out</th> <th>salary</th> </tr> </thead> <tbody> <tr> <td>0</td> <td>1</td> <td>3686</td> <td>2021-06-26</td> <td>07:22:30</td> <td>22:03:39</td> <td>64716969172</td> </tr> <tr> <td>1</td> <td>2</td> <td>3686</td> <td>2021-06-10</td> <td>06:27:32</td> <td>17:43:58</td> <td>9572746424</td> </tr> <tr> <td>2</td> <td>3</td> <td>3686</td> <td>2021-06-26</td> <td>10:23:31</td> <td>19:54:49</td> <td>50535635106</td> </tr> <tr> <td>3</td> <td>4</td> <td>3686</td> <td>2021-06-06</td> <td>09:25:13</td> <td>17:57:49</td> <td>57455281008</td> </tr> <tr> <td>4</td> <td>5</td> <td>3686</td> <td>2021-06-20</td> <td>10:17:18</td> <td>22:21:48</td> <td>83254690126</td> </tr> </tbody> </table> </div> ```python time = [] for n in range(len(rows1)): time.append(diff_times_in_seconds(rows1.clock_in[n],rows1.clock_out[n])) time ``` [14.685833333333333, 11.273888888888889, 9.521666666666667, 8.543333333333333, 12.075, 13.412222222222223, 12.104166666666666, 11.917222222222222, 11.295833333333333, 11.406666666666666, 8.703055555555556, 10.949444444444444, 6.372777777777777, 14.944166666666666, 14.8675, 11.337777777777777, 15.385555555555555, 17.496388888888887, 17.024444444444445, 11.016666666666667, 12.98, 11.93388888888889, 18.089444444444446, 11.3225, 12.765833333333333, 13.960555555555555, 7.5072222222222225, 10.051666666666666, 12.272222222222222, 9.671111111111111, 5.010277777777778, 5.325277777777778, 12.049166666666666, 5.045277777777778, 14.453055555555556, 12.806944444444444, 8.488888888888889, 12.859166666666667, 14.856944444444444, 7.265, 10.9725, 14.345, 14.516666666666667, 11.054444444444444, 15.639166666666666, 11.19, 14.042777777777777, 14.198611111111111, 14.963333333333333, 16.136388888888888, 12.465833333333334, 8.749444444444444, 7.360833333333333, 9.155555555555555, 13.191666666666666, 8.99638888888889, 7.051666666666667, 15.372777777777777, 8.752777777777778, 10.678611111111111, 15.08388888888889, 16.038333333333334, 8.241388888888888, 4.825277777777778, 7.575833333333334, 15.691666666666666, 6.078055555555555, 12.875555555555556, 11.471111111111112, 18.23138888888889, 7.412222222222222, 11.359722222222222, 12.123611111111112, 8.264722222222222, 9.126388888888888, 9.735833333333334, 10.508611111111112, 8.908611111111112, 11.931944444444444, 6.0055555555555555, 6.3405555555555555, 9.919444444444444, 8.382777777777777, 8.219166666666666, 12.676388888888889, 6.001111111111111, 18.458333333333332, 16.0075, 9.115277777777777, 9.074166666666667, 12.964166666666667, 9.123055555555556, 16.362222222222222, 15.711944444444445, 9.094444444444445, 6.46, 11.597222222222221, 10.977777777777778, 12.505, 14.869166666666667, 13.956666666666667, 12.088333333333333, 11.217777777777778, 15.796666666666667, 16.488333333333333, 9.605833333333333, 9.937777777777777, 13.764166666666666, 7.2572222222222225, 5.808055555555556, 18.08888888888889, 11.285277777777777, 11.18388888888889, 9.52361111111111, 10.777222222222223, 12.62888888888889, 10.114722222222222, 13.335, 9.316666666666666, 13.32611111111111, 16.380277777777778, 8.221944444444444, 6.043611111111111, 15.259722222222223, 12.991944444444444, 18.658055555555556, 14.413333333333334, 13.324444444444444, 8.487777777777778, 8.5325, 10.987222222222222, 17.52611111111111, 12.35, 7.473333333333334, 7.072222222222222, 9.51361111111111, 15.686388888888889, 11.08361111111111, 6.915, 9.995555555555555, 10.931111111111111, 12.841111111111111, 13.936666666666667, 15.939166666666667, 10.41638888888889, 9.5275, 16.586666666666666, 15.693055555555556, 6.990555555555556, 14.6775, 11.618611111111111, 13.788611111111111, 6.261666666666667, 14.3675, 13.800277777777778, 16.365555555555556, 12.246944444444445, 14.534166666666666, 13.988611111111112, 13.331388888888888, 10.400277777777777, 10.117777777777778, 14.3975, 17.369444444444444, 11.364166666666666, 8.671944444444444, 11.074166666666667, 10.14, 13.993333333333334, 11.305277777777778, 13.509722222222223, 6.852222222222222, 12.381944444444445, 12.294722222222223, 6.560555555555555, 4.8661111111111115, 7.938888888888889, 11.723055555555556, 8.977222222222222, 9.120833333333334, 10.921944444444444, 12.375277777777777, 12.25361111111111, 12.693055555555556, 13.450555555555555, 11.207777777777778, 7.3052777777777775, 15.56638888888889, 11.935277777777777, 11.852222222222222, 10.751944444444444, 12.738611111111112, 18.13277777777778, 6.896388888888889, 12.346666666666666, 9.811666666666667, 13.363055555555556, 11.45, 12.873888888888889, 13.029722222222222, 6.303333333333334, 13.065277777777778, 10.876111111111111, 12.6825, 10.726666666666667, 9.600555555555555, 11.968055555555555, 12.561666666666667, 7.926666666666667, 7.8825, 14.831666666666667, 10.901666666666667, 9.167222222222222, 10.326666666666666, 10.308055555555555, 14.935833333333333, 14.292222222222222, 13.166944444444445, 17.863611111111112, 16.23, 11.130277777777778, 17.09722222222222, 8.364444444444445, 8.827222222222222, 13.62861111111111, 14.169166666666667, 14.815555555555555, 14.45861111111111, 11.078333333333333, 16.06972222222222, 8.803333333333333, 9.551666666666666, 7.004166666666666, 14.181111111111111, 13.260833333333334, 10.355555555555556, 13.71111111111111, 8.804166666666667, 11.920555555555556, 6.651944444444444, 10.543055555555556, 10.062222222222223, 9.594444444444445, 8.071111111111112, 14.274166666666666, 14.768888888888888, 7.201388888888889, 10.485, 15.456111111111111, 11.391388888888889, 13.760833333333334, 8.614166666666666, 6.536111111111111, 6.904722222222222, 12.463611111111112, 6.19, 17.531666666666666, 9.704722222222221, 12.213333333333333, 10.028333333333334, 9.890277777777778, 14.985277777777778, 11.701666666666666, 16.453333333333333, 13.552777777777777, 12.697777777777778, 15.159166666666666, 12.401111111111112, 10.373611111111112, 6.771944444444444, 14.226944444444445, 12.09361111111111, 15.230277777777777, 14.405, 13.62888888888889, 17.7875, 5.867222222222222, 11.400833333333333, 9.26, 12.178333333333333, 8.525, 17.387777777777778, 13.171944444444444, 12.592222222222222, 13.625555555555556, 7.805, 12.374722222222223, 9.716666666666667, 6.882777777777778, 8.35, 9.33611111111111, 8.972222222222221, 11.886388888888888, 11.0475, 8.132777777777777, 10.076666666666666, 11.277222222222223, 17.183055555555555, 8.47, 7.535277777777778, 10.249444444444444, 4.76, 14.482222222222223, 8.917222222222222, 11.785277777777777, 18.2625, 8.908888888888889, 14.140555555555556, 9.210555555555555, 5.088611111111111, 14.069722222222222, 10.474722222222223, 10.894722222222223, 11.932222222222222, 11.68361111111111, 9.036944444444444, 11.654722222222222, 13.235833333333334, 13.722777777777777, 10.032777777777778, 8.701944444444445, 8.314722222222223, 12.774722222222222, 12.435833333333333, 16.581944444444446, 9.756388888888889, 17.835277777777776, 11.402777777777779, 17.252777777777776, 10.728333333333333, 11.286666666666667, 15.470555555555556, 8.041944444444445, 14.755, 9.163055555555555, 14.895277777777778, 8.904166666666667, 12.728055555555555, 13.970555555555556, 8.182777777777778, 13.793055555555556, 11.621666666666666, 13.782222222222222, 13.779166666666667, 6.911111111111111, 15.395277777777778, 6.8694444444444445, 9.1525, 8.780833333333334, 14.903888888888888, 10.091388888888888, 12.075, 13.73611111111111, 9.495555555555555, 13.149722222222222, 12.054444444444444, 16.19527777777778, 10.046666666666667, 14.246666666666666, 8.810833333333333, 13.275277777777777, 6.463055555555556, 10.948611111111111, 8.790277777777778, 11.033611111111112, 14.5025, 10.600833333333334, 9.424444444444445, 14.497777777777777, 12.815833333333334, 13.119166666666667, 12.671111111111111, 10.502777777777778, 9.816666666666666, 16.981666666666666, 10.779722222222222, 13.2475, 10.806111111111111, 11.559444444444445, 12.205555555555556, 17.86111111111111, 13.66611111111111, 12.09361111111111, 12.771944444444445, 12.230277777777777, 11.74388888888889, 12.23, 6.581944444444445, 6.663333333333333, 11.354444444444445, 13.673333333333334, 15.29888888888889, 11.27111111111111, 9.044722222222223, 11.606944444444444, 8.485555555555555, 8.695, 5.763333333333334, 12.43, 8.665555555555555, 14.799166666666666, 7.839722222222222, 5.8625, 9.7425, 8.70111111111111, 15.549722222222222, 5.603888888888889, 10.64861111111111, 12.8125, 10.5225, 14.741388888888888, 17.0725, 13.895, 10.727777777777778, 15.057222222222222, 12.365555555555556, 16.135277777777777, 12.703611111111112, 9.03111111111111, 15.126111111111111, 9.750833333333333, 12.131666666666666, 15.866666666666667, 14.416944444444445, 10.506944444444445, 10.474444444444444, 12.092777777777778, 7.168888888888889, 7.135277777777778, 14.171111111111111, 13.030277777777778, 11.12888888888889, 12.1275, 9.020555555555555, 16.144166666666667, 9.915555555555555, 18.720277777777778, 11.756388888888889, 11.299166666666666, 9.34361111111111, 6.8116666666666665, 10.896944444444445, 11.078333333333333, 8.164444444444445, 6.736111111111111, 9.765, 9.69138888888889, 12.968333333333334, 13.385277777777778, 9.701944444444445, 11.590277777777779, 11.376111111111111, 9.334722222222222, 10.062777777777777, 11.290833333333333, 13.009166666666667, 12.85361111111111, 8.329166666666667, 15.324166666666667, 7.823888888888889, 11.2575, 9.100277777777778, 11.341111111111111, 6.651388888888889, 11.45861111111111, 13.921666666666667, 7.988888888888889, 11.247777777777777, 9.864722222222222, 10.31861111111111, 10.140277777777778, 14.395833333333334, 11.408055555555556, 6.628888888888889, 11.810277777777777, 13.060277777777777, 5.972222222222222, 10.043333333333333, 6.808611111111111, 8.368611111111111, 11.236666666666666, 13.602777777777778, 15.566666666666666, 12.651111111111112, 7.67, 12.793611111111112, 14.4, 14.743611111111111, 17.52166666666667, 8.360277777777778, 10.990555555555556, 13.52111111111111, 9.306666666666667, 10.705555555555556, 11.194166666666666, 9.875, 13.037222222222223, 12.677222222222222, 12.490277777777777, 6.29, 6.940555555555555, 11.308333333333334, 13.860277777777778, 14.942777777777778, 13.2775, 8.235555555555555, 12.415277777777778, 15.689444444444444, 11.042222222222222, 13.539444444444445, 7.982222222222222, 10.554722222222223, 8.14861111111111, 12.178055555555556, 11.573611111111111, 5.683888888888889, 8.37, 5.381388888888889, 7.541388888888889, 11.385555555555555, 9.665833333333333, 9.995, 11.916944444444445, 9.834444444444445, 10.004166666666666, 12.018333333333333, 12.431944444444444, 17.46527777777778, 18.140555555555554, 13.65, 12.805555555555555, 11.623055555555556, 16.463333333333335, 9.864166666666666, 5.3694444444444445, 10.258611111111112, 10.963888888888889, 8.430277777777778, 6.790277777777778, 14.194722222222222, 8.23611111111111, 5.3341666666666665, 13.866666666666667, 13.740277777777777, 10.713333333333333, 6.861666666666666, 11.675833333333333, 8.846666666666666, 13.196388888888889, 12.179444444444444, 6.434722222222222, 9.793333333333333, 12.493055555555555, 8.2125, 14.933333333333334, 13.985, 7.776111111111111, 10.942222222222222, 10.7725, 11.504166666666666, 12.855277777777777, 5.607222222222222, 12.94361111111111, 12.483333333333333, 14.304444444444444, 11.705277777777777, 8.163611111111111, 8.284722222222221, 17.635833333333334, 10.141666666666667, 12.548055555555555, 8.254444444444445, 5.923055555555556, 16.60527777777778, 7.764166666666667, 8.81611111111111, 12.3875, 13.240833333333333, 8.916666666666666, 12.347222222222221, 6.091666666666667, 11.785277777777777, 15.096944444444444, 8.2375, 14.373333333333333, 6.836388888888889, 5.350555555555555, 10.63111111111111, 10.196944444444444, 9.735, 11.977777777777778, 8.669444444444444, 13.231111111111112, 14.214722222222223, 14.597222222222221, 12.875555555555556, 12.963333333333333, 14.268888888888888, 15.558333333333334, 12.589722222222223, 8.921111111111111, 11.885555555555555, 12.403055555555556, 11.135555555555555, 6.600833333333333, 14.400833333333333, 18.176111111111112, 10.12861111111111, 10.952777777777778, 13.622222222222222, 11.874444444444444, 9.8975, 9.181666666666667, 11.818333333333333, 15.358333333333333, 10.195, 4.695277777777778, 8.099722222222223, 14.635, 8.672222222222222, 11.780833333333334, 16.02111111111111, 10.63888888888889, 12.399722222222222, 9.054444444444444, 8.297222222222222, 8.29861111111111, 13.212777777777777, 9.099444444444444, 9.085833333333333, 12.522777777777778, 10.44138888888889, 11.450833333333334, 8.86888888888889, 8.930277777777778, 11.164444444444445, 11.280277777777778, 7.909166666666667, 8.622777777777777, 13.290833333333333, 13.3525, 11.765277777777778, 9.736666666666666, 10.56, 15.9625, 13.266666666666667, 16.925, 10.731388888888889, 13.188611111111111, 10.9175] ```python import seaborn as sns ax = sns.boxplot(x="salary", y="id", data=rows1,orient="h") ax ``` <matplotlib.axes._subplots.AxesSubplot at 0x7fad5920b0d0> ![png](output_10_1.png) ```python ## 統計 兩位同事是不是有薪水上的差異 from scipy import stats s1 = rows1[rows1["id"]==1735].salary s2 = rows1[rows1["id"]==2264].salary stats.ttest_ind(s1, s2) ``` Ttest_indResult(statistic=-2.0488037201723244, pvalue=0.044461151307115525) ```python statistic, pvalue = stats.ttest_ind(s1, s2) pvalue ``` 0.044461151307115525 ```python rows1.groupby("id").size() ``` id 1735 33 2264 35 3686 33 3719 34 4155 33 4290 26 4513 31 4952 29 5586 33 5833 32 5956 31 6023 30 6479 32 6680 36 6931 36 7399 34 7445 32 7845 34 8483 33 8771 33 dtype: int64 ```python ## 取出每個人前10高的薪水 rows2 = rows1.sort_values(['salary'], ascending=False).groupby('id').head(26) rows2.index = range(len(rows2)) rows2.head() ``` <div> <style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </style> <table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th></th> <th>check_n</th> <th>id</th> <th>date</th> <th>clock_in</th> <th>clock_out</th> <th>salary</th> </tr> </thead> <tbody> <tr> <td>0</td> <td>762</td> <td>8771</td> <td>2021-06-23</td> <td>10:28:29</td> <td>18:34:28</td> <td>99925359873</td> </tr> <tr> <td>1</td> <td>359</td> <td>6680</td> <td>2021-06-15</td> <td>10:01:26</td> <td>18:09:24</td> <td>99893342943</td> </tr> <tr> <td>2</td> <td>284</td> <td>2264</td> <td>2021-06-20</td> <td>05:28:11</td> <td>19:55:42</td> <td>99887519278</td> </tr> <tr> <td>3</td> <td>395</td> <td>6479</td> <td>2021-06-22</td> <td>05:08:34</td> <td>17:34:43</td> <td>99768790025</td> </tr> <tr> <td>4</td> <td>737</td> <td>7399</td> <td>2021-06-24</td> <td>06:26:22</td> <td>19:18:54</td> <td>99749262338</td> </tr> </tbody> </table> </div> ```python time = [] for n in range(len(rows2)): time.append(diff_times_in_seconds(rows2.clock_in[n],rows2.clock_out[n])) rows2["time_different"] = time rows2.head() ``` <div> <style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </style> <table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th></th> <th>check_n</th> <th>id</th> <th>date</th> <th>clock_in</th> <th>clock_out</th> <th>salary</th> <th>time_different</th> </tr> </thead> <tbody> <tr> <td>0</td> <td>762</td> <td>8771</td> <td>2021-06-23</td> <td>10:28:29</td> <td>18:34:28</td> <td>99925359873</td> <td>8.099722</td> </tr> <tr> <td>1</td> <td>359</td> <td>6680</td> <td>2021-06-15</td> <td>10:01:26</td> <td>18:09:24</td> <td>99893342943</td> <td>8.132778</td> </tr> <tr> <td>2</td> <td>284</td> <td>2264</td> <td>2021-06-20</td> <td>05:28:11</td> <td>19:55:42</td> <td>99887519278</td> <td>14.458611</td> </tr> <tr> <td>3</td> <td>395</td> <td>6479</td> <td>2021-06-22</td> <td>05:08:34</td> <td>17:34:43</td> <td>99768790025</td> <td>12.435833</td> </tr> <tr> <td>4</td> <td>737</td> <td>7399</td> <td>2021-06-24</td> <td>06:26:22</td> <td>19:18:54</td> <td>99749262338</td> <td>12.875556</td> </tr> </tbody> </table> </div> ```python ## 畫圖趨勢圖,是不是時間越久,薪水越高 sns.lineplot(x="time_different",y = "salary",data=rows2) ``` <matplotlib.axes._subplots.AxesSubplot at 0x7fad5b21d790> ![png](output_16_1.png) ```python ## 製作分類,超過12為類別1,小於等於12為類別0 rows2["class"] = rows2["time_different"] rows2["class"][rows2["class"]<=12] = 0 rows2["class"][rows2["class"]>12] = 1 rows2["class"] ``` /Users/yenjungchiu/opt/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:4: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy after removing the cwd from sys.path. /Users/yenjungchiu/opt/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:5: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy """ 0 0.0 1 0.0 2 1.0 3 1.0 4 1.0 ... 515 1.0 516 0.0 517 0.0 518 0.0 519 1.0 Name: class, Length: 520, dtype: float64 ```python ## 分類是不是大於12小時的人,和少於12小時的人,可以用薪水來分出差異 import numpy as np from sklearn import tree from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split( np.array(rows2[["id","salary"]]), np.array(rows2["class"]), test_size=0.2) clf = tree.DecisionTreeClassifier() clf = clf.fit(X_train, y_train) ``` ```python from sklearn.metrics import accuracy_score pre = clf.predict(X_test) accuracy_score(y_test, pre) ``` 0.5673076923076923 # 功課 ## 一、兩兩統計,輸出 同事一、同事二、檢定p value ** 同事一和同事二的搭配要去重覆,例如 (A,B)和(B,A)只能保留一個 ```python ``` ## 二、取出每一位同事,排名倒數10個的薪水,計算平均值,使用bar plot呈現 ```python ``` ## 三、使用分類模型,分析6/15前後,薪水與id是否可以預測上班時間長短 ```python ```