Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

MySQL Database Design and Analysis Use the Accidents_2016.csv file below to implement the following steps for your database project. Create a MySQL schema named accidents.

MySQL Database Design and Analysis

Use the Accidents_2016.csv file below to implement the following steps for your database project.

  1. Create a MySQL schema named accidents.
  2. Within the accidents schema, create a table named accidents_2016 with the following columns:
    • accident_index as a varchar(13),
    • accident_severity as an int
  3. Within the accidents schema, create a table named vehicles_2016 with the following columns:
    • accident_index as a varchar(13),
    • vehicle_type as a varchar(10)
  4. Within the accidents schema, create a table named vehicle_type with the following columns:
    • vcode int,
    • vtype as a varchar(100)
  5. Next, you will load the data for the three tables.
    • Load the accidents data. Note that @dummy is a placeholder for a column in the .csv file that you want to ignore during the load.
load data local infile '\\data\\Accidents_2016.csv' into table accidents_2016 fields terminated by ',' enclosed by '"' lines terminated by ' ' ignore 1 lines (@col1, @dummy, @dummy, @dummy, @dummy, @dummy, @col2 ,@dummy, @dummy, @dummy, @dummy, @dummy ,@dummy, @dummy, @dummy, @dummy, @dummy ,@dummy, @dummy, @dummy, @dummy, @dummy ,@dummy, @dummy, @dummy, @dummy, @dummy ,@dummy, @dummy, @dummy, @dummy, @dummy ) set accident_index=@col1,accident_severity=@col2;
  • Load the vehicle data.
load data local infile '\\data\\Vehicles_2016.csv' into table vehicles_2016 fields terminated by ',' enclosed by '"' lines terminated by ' ' ignore 1 lines (@col1, @dummy, @dummy, @col2 ,@dummy, @dummy, @dummy, @dummy, @dummy ,@dummy, @dummy, @dummy, @dummy, @dummy ,@dummy, @dummy, @dummy, @dummy, @dummy ,@dummy, @dummy, @dummy, @dummy, @dummy ) set accident_index=@col1,vehicle_type=@col2;
  • Load the vehicle type data.
load data local infile '\\data\\vehicle_type.csv' into table vehicle_type fields terminated by ',' enclosed by '"' lines terminated by ' ' ignore 1 lines
  1. After the data are loaded, you will perform the analysis. First, find the average accident severity and the number of accidents for vehicles of type motorcycle. Note the performance of your query. Your query may run so slowly that MySQL aborts running completing.
  2. Improve Query Performance
    • Look at the explain tool output and save the results to a graphic file.
    • From the explain results, how many rows have to be read per join?
    • Add an index named accident_index of type index" on the accident_index
    • column in the accidents_2016 table and another index named accident_index of type index on the vehicles_2106 table.
alter table accidents_2016 add index accident_index (accident_index asc);
alter table vehicles_2016 add index accident_index (accident_index asc);

After adding the indices, rerun the query explanation tool and determine the number of rows to be read per join.

  1. Find the median accident severity.

MySQL does not have a median function so to find the median accident severity, you will have to write a Python script.

  • You'll need to install Python and the PyMySQL module.
  • Install Python version 2.7 or 3.4 from www.python.org.

To install the PyMySQL module, run the following command in a Windows command prompt after Python has been installed:

python -m pip install --index-url=https://pypi.python.org/simple/ --trusted-host pypi.python.org PyMySQL

b) Create an accident median table

create table accident_medians ( vtype varchar(100), severity int );
  • Run the following Python script:
import pymysql myConnection = pymysql.connect(host='localhost', user='****', passwd='****', db='accidents') cur = myConnection.cursor() cur.execute('SELECT vtype FROM vehicle_type WHERE vtype LIKE "%otorcycle%";') cycleList = cur.fetchall() selectSQL = (''' SELECT t.vtype, a.accident_severity FROM accidents_2016 AS a JOIN vehicles_2016 AS v ON a.accident_index = v.Accident_Index JOIN vehicle_type AS t ON v.Vehicle_Type = t.vcode WHERE t.vtype LIKE %s ORDER BY a.accident_severity;''') insertSQL = ('''INSERT INTO accident_medians VALUES (%s, %s);''') for cycle in cycleList: cur.execute(selectSQL,cycle[0]) accidents = cur.fetchall() quotient, remainder = divmod(len(accidents),2) if remainder: med_sev = accidents[quotient][1] else: med_sev = (accidents[quotient][1] + accidents[quotient+2][1])/2 print('Finding median for',cycle[0]) cur.execute(insertSQL,(cycle[0],med_sev)) myConnection.commit() myConnection.close()

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Intelligent Information And Database Systems 6th Asian Conference Aciids 2014 Bangkok Thailand April 7 9 2014 Proceedings Part I 9 2014 Proceedings Part 1 Lnai 8397

Authors: Ngoc-Thanh Nguyen ,Boonwat Attachoo ,Bogdan Trawinski ,Kulwadee Somboonviwat

2014th Edition

3319054759, 978-3319054759

More Books

Students also viewed these Databases questions

Question

Tell the merits and demerits of Mendeleev's periodic table.

Answered: 1 week ago