{ "cells": [ { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "# BigQuery, Pandas 예제 \n", "노트북 작성: 박상길 \n", "inspired by a book called \n", "『Google BigQuery: The Definitive Guide: Data Warehousing, Analytics, and Machine Learning at Scale』" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "런던의 전체 자전거 대여소의 사용 횟수와 평균 사용 시간을 추출해보자." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "%%bigquery df\n", "SELECT \n", " start_station_name \n", " , AVG(duration) as duration\n", " , COUNT(duration) as num_trips\n", "FROM `bigquery-public-data`.london_bicycles.cycle_hire \n", "GROUP BY start_station_name\n", "ORDER BY num_trips DESC" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
start_station_namedurationnum_trips
0Belgrove Street , King's Cross1011.076696234458
1Hyde Park Corner, Hyde Park2782.730709215629
2Waterloo Station 3, Waterloo866.376135201630
3Black Lion Gate, Kensington Gardens3588.012004161952
4Albert Gate, Hyde Park2359.413930155647
............
875Monier Road1576.36363611
876Blackfriars road, Southwark96.0000005
877LSP2105.0000004
878PENTON STREET COMMS TEST TERMINAL _ CONTACT MA...0.0000001
879LSP1840.0000001
\n", "

880 rows × 3 columns

\n", "
" ], "text/plain": [ " start_station_name duration num_trips\n", "0 Belgrove Street , King's Cross 1011.076696 234458\n", "1 Hyde Park Corner, Hyde Park 2782.730709 215629\n", "2 Waterloo Station 3, Waterloo 866.376135 201630\n", "3 Black Lion Gate, Kensington Gardens 3588.012004 161952\n", "4 Albert Gate, Hyde Park 2359.413930 155647\n", ".. ... ... ...\n", "875 Monier Road 1576.363636 11\n", "876 Blackfriars road, Southwark 96.000000 5\n", "877 LSP2 105.000000 4\n", "878 PENTON STREET COMMS TEST TERMINAL _ CONTACT MA... 0.000000 1\n", "879 LSP1 840.000000 1\n", "\n", "[880 rows x 3 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
durationnum_trips
count880.000000880.000000
mean1348.35115327692.273864
std434.05782923733.621289
min0.0000001.000000
25%1078.68497413033.500000
50%1255.88922323658.500000
75%1520.50405535450.500000
max4836.380090234458.000000
\n", "
" ], "text/plain": [ " duration num_trips\n", "count 880.000000 880.000000\n", "mean 1348.351153 27692.273864\n", "std 434.057829 23733.621289\n", "min 0.000000 1.000000\n", "25% 1078.684974 13033.500000\n", "50% 1255.889223 23658.500000\n", "75% 1520.504055 35450.500000\n", "max 4836.380090 234458.000000" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "다음과 같이 산점도(scatter plot)로 표현할 수 있다." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df.plot.scatter('duration', 'num_trips')" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "만일 누군가 어떤 대여소에서 자전거를 빌린 지 10분도 채 되지 않아 다시 원래 대여소로 되돌려 놓았다면 아마도 그 자전거에 문제가 있었기 때문이라고 추정할 수 있다. 이런 상황을 망친 나들이(bad trips)라 부르기로 하고 추출을 시도해보자." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "%%bigquery badtrips\n", "WITH all_bad_trips AS (\n", " SELECT \n", " start_station_name\n", " , COUNTIF(duration < 600 AND start_station_name = end_station_name) AS bad_trips\n", " , COUNT(*) as num_trips\n", " FROM `bigquery-public-data`.london_bicycles.cycle_hire\n", " WHERE EXTRACT(YEAR FROM start_date) = 2015\n", " GROUP BY start_station_name\n", " HAVING num_trips > 10\n", ")\n", "SELECT *, bad_trips / num_trips AS fraction_bad FROM all_bad_trips\n", "ORDER BY fraction_bad DESC" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
start_station_namebad_tripsnum_tripsfraction_bad
0Contact Centre, Southbury House20480.416667
1Monier Road, Newham1250.040000
2Aberfeldy Street, Poplar359550.036649
3Ormonde Gate, Chelsea31589320.035266
4Thornfield House, Poplar289470.029567
...............
818Sun Street, Liverpool Street70287870.002432
819Finsbury Circus, Liverpool Street100448220.002231
820Waterloo Station 3, Waterloo151809160.001866
821Waterloo Roundabout, Waterloo316780.001788
822Monier Road0110.000000
\n", "

823 rows × 4 columns

\n", "
" ], "text/plain": [ " start_station_name bad_trips num_trips fraction_bad\n", "0 Contact Centre, Southbury House 20 48 0.416667\n", "1 Monier Road, Newham 1 25 0.040000\n", "2 Aberfeldy Street, Poplar 35 955 0.036649\n", "3 Ormonde Gate, Chelsea 315 8932 0.035266\n", "4 Thornfield House, Poplar 28 947 0.029567\n", ".. ... ... ... ...\n", "818 Sun Street, Liverpool Street 70 28787 0.002432\n", "819 Finsbury Circus, Liverpool Street 100 44822 0.002231\n", "820 Waterloo Station 3, Waterloo 151 80916 0.001866\n", "821 Waterloo Roundabout, Waterloo 3 1678 0.001788\n", "822 Monier Road 0 11 0.000000\n", "\n", "[823 rows x 4 columns]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "badtrips" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "badtrips.plot.scatter('num_trips', 'fraction_bad')" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "이 그래프를 보면 fraction_bad 컬럼의 값이 높을수록 관련된 대여소의 num_trips 컬럼 값이 낮다는 점을 알 수 있지만 0.4라는 예외 때문에 그 트렌드가 명확하게 보이지 않는다. 다음 seaborn 패키지를 이용해서 데이터를 조금 더 자세히 들여다보자.\n", "\n", "`regplot` do Plot the data and draw a linear regression model." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "(0.0, 0.05)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import seaborn as sns\n", "ax = sns.regplot(badtrips['num_trips'],badtrips['fraction_bad'])\n", "ax.set_ylim(0, 0.05)" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "이제 num_trips 컬럼 값이 낮은 대여소일수록 fraction_bad 컬럼 값이 높다는 점이 명확해졌다." ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "그런데, fraction_bad 값이 높을수록 num_trips 값이 낮으므로 단순히 fraction_bad 값이 높은 대여소로 직원을 보내서는 안된다. 그렇다면 임의 조사를 수행할 대여소를 어떻게 골라야 할까?\n", "\n", "한 가지 방법은 사용 빈도가 높은 대여소 중에서 상황이 좋지 않은 5곳을 선택하고, 그 다음으로 사용 빈도가 높은 대여소 중 5곳을 선택해 나가는 방법이다. 그러려면 num_trips 컬럼 값을 기준으로 대여소의 변위치(quantile)을 구해 4개의 묶음(band)을 만들고, 각 묶음 안에서 망친 나들이 비율이 가장 높은 5개의 대여소를 찾으면 된다." ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "num_trips >= 4826.4 and num_trips < 8511.8\n", " start_station_name bad_trips num_trips fraction_bad\n", "6 River Street , Clerkenwell 221 8279 0.026694\n", "9 Courland Grove, Wandsworth Road 105 5369 0.019557\n", "10 Stanley Grove, Battersea 92 4882 0.018845\n", "12 Southern Grove, Bow 112 6152 0.018205\n", "18 Richmond Way, Shepherd's Bush 126 8149 0.015462\n", "\n", "num_trips >= 8511.8 and num_trips < 11502.6\n", " start_station_name bad_trips num_trips fraction_bad\n", "3 Ormonde Gate, Chelsea 315 8932 0.035266\n", "41 Emperor's Gate, South Kensington 136 10554 0.012886\n", "53 Chepstow Villas, Notting Hill 135 11038 0.012230\n", "57 Salmon Lane, Limehouse 113 9345 0.012092\n", "63 Greyhound Road, Hammersmith 118 9998 0.011802\n", "\n", "num_trips >= 11502.6 and num_trips < 16509.2\n", " start_station_name bad_trips num_trips \\\n", "35 Hertford Road, De Beauvoir Town 195 14188 \n", "39 Bramham Gardens, Earl's Court 212 16178 \n", "62 Lancaster Gate , Bayswater 172 14554 \n", "75 Ilchester Gardens, Bayswater 159 14137 \n", "80 Westfield Library Corner, Shepherd's Bush 126 11517 \n", "\n", " fraction_bad \n", "35 0.013744 \n", "39 0.013104 \n", "62 0.011818 \n", "75 0.011247 \n", "80 0.010940 \n", "\n", "num_trips >= 16509.2 and num_trips < 95740.0\n", " start_station_name bad_trips num_trips fraction_bad\n", "25 Queen's Gate, Kensington Gardens 396 27457 0.014423\n", "74 Speakers' Corner 2, Hyde Park 468 41107 0.011385\n", "76 Cumberland Gate, Hyde Park 303 26981 0.011230\n", "77 Albert Gate, Hyde Park 729 66547 0.010955\n", "82 Triangle Car Park, Hyde Park 454 41675 0.010894\n", "\n" ] } ], "source": [ "stations_to_examine = []\n", "for band in range(1,5):\n", " min_trips = badtrips['num_trips'].quantile(0.2*(band))\n", " max_trips = badtrips['num_trips'].quantile(0.2*(band+1))\n", " query = 'num_trips >= {} and num_trips < {}'.format(\n", " min_trips, max_trips)\n", " print(query) # band\n", " stations = badtrips.query(query)\n", " stations = stations.sort_values(\n", " by=['fraction_bad'], ascending=False)[:5] \n", " print(stations) # 5 worst\n", " stations_to_examine.append(stations)\n", " print()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
start_station_namebad_tripsnum_tripsfraction_bad
6River Street , Clerkenwell22182790.026694
9Courland Grove, Wandsworth Road10553690.019557
10Stanley Grove, Battersea9248820.018845
12Southern Grove, Bow11261520.018205
18Richmond Way, Shepherd's Bush12681490.015462
\n", "
" ], "text/plain": [ " start_station_name bad_trips num_trips fraction_bad\n", "6 River Street , Clerkenwell 221 8279 0.026694\n", "9 Courland Grove, Wandsworth Road 105 5369 0.019557\n", "10 Stanley Grove, Battersea 92 4882 0.018845\n", "12 Southern Grove, Bow 112 6152 0.018205\n", "18 Richmond Way, Shepherd's Bush 126 8149 0.015462" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "stations_to_examine = pd.concat(stations_to_examine)\n", "stations_to_examine.head(5)" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "이 데이터를 추후 보고서 작성을 위해 별도 테이블로 저장한다." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Loaded 20 rows into myhyundai20.experiments.bad_bikes\n" ] } ], "source": [ "from google.cloud import bigquery\n", "\n", "PROJECT='myhyundai20'\n", "bq = bigquery.Client(project=PROJECT)\n", "\n", "table_id = '{}.experiments.bad_bikes'.format(PROJECT)\n", "job = bq.load_table_from_dataframe(stations_to_examine, table_id)\n", "job.result() # blocks and waits\n", "print(\"Loaded {} rows into {}\".format(job.output_rows, table_id))" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "이제 저장한 대여소 위치를 위경도를 지닌 테이블과 조인하여 지도에 표현해본다." ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "%%bigquery stations_to_examine\n", "SELECT \n", " start_station_name AS station_name\n", " , num_trips\n", " , fraction_bad\n", " , latitude\n", " , longitude\n", "FROM `myhyundai20`.experiments.bad_bikes AS bad\n", "JOIN `myhyundai20`.experiments.cycle_stations AS s\n", "ON bad.start_station_name = s.name" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
station_namenum_tripsfraction_badlatitudelongitude
0Ormonde Gate, Chelsea89320.03526651.487964-0.161765
1Stanley Grove, Battersea48820.01884551.470475-0.152130
2Courland Grove, Wandsworth Road53690.01955751.472918-0.132103
3Southern Grove, Bow61520.01820551.523538-0.030556
4Salmon Lane, Limehouse93450.01209251.514115-0.033828
\n", "
" ], "text/plain": [ " station_name num_trips fraction_bad latitude \\\n", "0 Ormonde Gate, Chelsea 8932 0.035266 51.487964 \n", "1 Stanley Grove, Battersea 4882 0.018845 51.470475 \n", "2 Courland Grove, Wandsworth Road 5369 0.019557 51.472918 \n", "3 Southern Grove, Bow 6152 0.018205 51.523538 \n", "4 Salmon Lane, Limehouse 9345 0.012092 51.514115 \n", "\n", " longitude \n", "0 -0.161765 \n", "1 -0.152130 \n", "2 -0.132103 \n", "3 -0.030556 \n", "4 -0.033828 " ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stations_to_examine.head(5)" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "folium 패키지를 이용해 지도에 표현해보자." ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ "" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import folium\n", "map_pts = folium.Map(location=[51.5, -0.15], zoom_start=12)\n", "for idx, row in stations_to_examine.iterrows():\n", " folium.Marker( location=[row['latitude'], row['longitude']], popup=row['station_name'] ).add_to(map_pts)\n", "map_pts" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "이제 이 대여소 위치에 직원을 보내서 대여소를 점검하자." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }