Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 29 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
29
Dung lượng
287,16 KB
Nội dung
TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN MÔN XỬ LÍ DỮ LIỆU LỚN GIỮA KÌ Người hướng dẫn: BÙI THANH HÙNG Người thực hiện: NGUYỄN VĂN TÀI – 518H0050 Lớp : 18H50203 Khố THÀNH PHỐ HỒ CHÍ MINH, NĂM 2022 : 22 TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN MƠN XỬ LÍ DỮ LIỆU LỚN GIỮA KÌ Người hướng dẫn: BÙI THANH HÙNG Người thực hiện: NGUYỄN VĂN TÀI – 518H0050 Lớp : 18H50203 Khoá THÀNH PHỐ HỒ CHÍ MINH, NĂM 2022 : 22 i LỜI CẢM ƠN Để hoàn thành tiểu luận này, em xin gửi lời cảm ơn chân thành đến: Các thầy cô khoa Công nghệ thông tin cung cấp kiến thức tảng để áp dụng nghiên cứu thông tin tiểu luận Em xin bày tỏ lòng biết ơn sâu sắc đến thầy Bùi Thanh Hùng người trực tiếp giảng dạy hướng dẫn tạo điều kiện thuận lợi giúp đỡ em trình thực đề tài Tuy có nhiều cố gắng, chắn tiểu luận em cịn có vài điểm sai sót Rất mong nhận nhận xét, ý kiến đóng góp, phê bình từ phía Thầy để tiểu luận hoàn thiện Xin chân thành cám ơn! ii LỜI CAM ĐOAN Tôi xin cam đoan sản phẩm đồ án riêng hướng dẫn Bui Thanh Hung Các kết đề tài trung thực chưa công bố hình thức trước Những số liệu bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá tác giả thu thập từ nguồn khác có ghi rõ phần tài liệu tham khảo Ngoài ra, tiểu luận sử dụng số nhận xét, đánh số liệu tác giả khác, quan tổ chức khác có trích dẫn thích nguồn gốc Nếu phát có gian lận tơi xin hồn tồn chịu trách nhiệm nội dung đồ án Trường đại học Tôn Đức Thắng không liên quan đến vi phạm tác quyền, quyền gây trình thực (nếu có) TP Hồ Chí Minh, ngày 31 tháng 03 năm 2022 Tác giả (ký tên ghi rõ họ tên) Nguyễn Văn Tài iii PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN Phần xác nhận GV hướng dẫn _ _ _ _ _ _ _ Tp Hồ Chí Minh, ngày tháng (kí ghi họ tên) năm Phần đánh giá GV chấm _ _ _ _ _ _ _ Tp Hồ Chí Minh, ngày tháng năm (kí ghi họ tên) iv v TÓM TẮT MỤC LỤC LỜI CẢM ƠN .i LỜI CAM ĐOAN ii PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN .iii TÓM TẮT iv MỤC LỤC DANH MỤC KÍ HIỆU VÀ CHỮ VIẾT TẮT DANH MỤC CÁC BẢNG BIỂU, HÌNH VẼ, ĐỒ THỊ CHƯƠNG I - THU THẬP DỮ LIỆU Viết code cào liệu từ trang Web, lưu kết vào file tương ứng mô tả ngắn gọn cấu trúc trang Web 1.1 Code cào liệu 1.2 Cấu trúc trang Web Với liệu bạn vừa cào về, bạn thực yêu cầu sau: 2.1 Hãy đọc tất thẻ html (div) với lớp "quote" lưu biến 'result’, hiển thị giá trị biến 'result’ hình? 2.2 Hãy tìm biến 'result’ vừa liệu có chứa nhãn "small" với class "author" in kết hình? .6 2.3 Hãy viết hàm tacgiaLink() để lấy nội dung tác giả Với tác giả in hình nội dung 2.4 Hãy lưu kết câu c vào file Quote.csv tương ứng, với tác giả dòng liệu Bạn yêu cầu thu thập 40 câu nói tiếng từ trang web cách tự động theo code ý trên? .7 CHƯƠNG II - KHAI PHÁ DỮ LIỆU Xử lý liệu- Data Imputation .8 1.1 Giới thiệu: 1.2 Một số giá trị liệu Trường ngày sinh chưa có, bạn đề xuất cách điền? .8 1.3 Bạn thêm vào Trường Tuoi (Tuổi) đề xuất cách điền tuổi tác giả? 10 Khám phá liệu- Data Exploration 10 2.1 Giới thiệu .10 2.2 Thống kê tác giả câu nói tiếng có liệu 13 2.3 Thống kê năm sinh độ tuổi tác giả 14 2.4 Thống kê câu nói tiếng như: câu dài nhất, ngắn nhất, số từ 14 2.5 Thống kê từ sử dụng câu nói 14 2.6 Phân tích, trực quan mối quan hệ giữa tác giả câu nói tiếng 14 2.7 Phân tích, trực quan mối quan hệ tác giả với 15 Suy luận 16 3.1 Bạn yêu cầu phân loại câu nói theo tên người tiếng tính độ tương đồng phong cách nói tác giả theo yêu cầu sau: .16 3.2 Hãy dự đoán tên người tiếng theo câu nói dựa đặc trưng bạn trích xuất đánh giá liệu cho với tỉ lệ Train/Test độ đo phù hợp? 16 2.2 Hãy tìm biến 'result’ vừa liệu có chứa nhãn "small" với class "author" in kết hình? def execute(result): authors = []; links = []; quotes = []; tags = [] for i in range(int(40/len(result))): page = urllib.request.urlopen(url + 'page/' + str(i+1) + '/') soup = BeautifulSoup(page, 'html.parser') authors += crawlingData(soup, 'small', {'class': 'author'}, True, False, False) links += crawlingData(soup, 'span', {}, False, True, False) quotes += crawlingData(soup, 'span', {'class': 'text'}, True, False, False) tags += crawlingData(soup, 'div', {'class': 'tags'}, False, False, True) return authors, links, quotes, tags authors, links, quotes, tags = execute(result) print('author: ', authors) 2.3 Hãy viết hàm tacgiaLink() để lấy nội dung tác giả Với tác giả in hình nội dung def tacgiaLink(link): page = urllib.request.urlopen(link + '/') soup = BeautifulSoup(page, 'html.parser') datas = crawlingData(soup, 'span', {'class': 'author-born-date'}, True, False, False) return datas[0] def redirect(links): datas = [] for link in links: datas.append(tacgiaLink(link)) return datas bDate = redirect(links) for i in range(len(authors)): print('+++++++++++++++++++++++') print('Tên tác giả: ', authors[i]) print('Đường link tác giả: ', links[i]) print('Ngày tháng năm sinh: ', bDate[i]) print('Câu nói tiếng: ', quotes[i]) 2.4 Hãy lưu kết câu c vào file Quote.csv tương ứng, với tác giả dòng liệu Bạn u cầu thu thập 40 câu nói tiếng từ trang web cách tự động theo code ý trên? data = {'Tacgia': authors, 'Link': links, 'Namsinh': bDate, 'Quote': quotes} df = pd.DataFrame(data) df.to_csv('Quote.csv', index=False) CHƯƠNG II - KHAI PHÁ DỮ LIỆU Xử lý liệu- Data Imputation 1.1 Giới thiệu: Missing Data gì? Missing data là dữ liệu bị thiếu, hiển thị như NaN, Nat, Null, N/A,… Missing Data xuất nhiều nguyên nhân như: Người dùng quên điền Dữ liệu bị trình chuyển thủ công từ sở liệu cũ Lỗi chương trình Thiếu liệu trùng hợp Missing Data phân thành loại: Missing at Random (dữ liệu khuyết ngẫu nhiên) Missing Completely at Random (dữ liệu thiếu hoàn toàn ngẫu nhiên) Missing Not at Random (dữ liệu khuyết không ngẫu nhiên). 1.2 Một số giá trị liệu Trường ngày sinh chưa có, bạn đề xuất cách điền? Thực tế liệu cào trường năm sinh khơng có liệu Nhưng giả định vài trường hợp bị null xử lý sau: Bước : Khởi tạo liệu null # initialize null df df_null = df.copy() df_null.loc[df_null.Tacgia == 'Albert Einstein', 'Namsinh'] = np.nan df_null Bước : Xử lý liệu null cách giảm số lượng cột dataframe xảy việc liệu => không phù hợp 10 # handle # dropna(): missing datas aren't neccessary or taking up a smail part of the dataframe df_null.dropna().reset_index(drop=True) # reduce the number of rows in dataframe => Lost other datas => unsuitable Bước : Trong trường hợp không sử dụng cột “Namsinh”, giải pháp bỏ cột “Namsinh” Nhưng khơng tính tuổi khơng có kiện năm sinh => khơng phù hợp # incase we don't need to use column "Namsinh", the solution is to drop this column df_null.drop('Namsinh', axis=1) # can't calculate age without birthdate => unsuitable Bước : Loại bỏ liệu không liên quan có ảnh hưởng đến liệu khác Nhưng khơng tính tuổi tác giả => khơng phù hợp # fillna(): missing datas aren't necessary, but effect other datas df_null.fillna(0) # can't calculate age too => unsuitable Bước : Dùng phương pháp ffill : lấy giá trị dòng chèn xuống dòng Nếu dòng bị null khơng thể thay => khơng phù hợp df_null.fillna(method='ffill') # the first value is still null => unsuitable Bước : Dùng phương pháp bfill : lấy giá trị dòng chèn lên dòng Nếu dòng bị null khơng thể thay => khơng phù hợp df_null.fillna(method='bfill') # if the last value is null, it will be null forever => unsuitable 11 Bước : Lấy giá trị xuất nhiều mảng thay chỗ cịn lại Do điền tất trường dataframe mà khơng bị bỏ sót ô => phù hợp df_null.fillna(df_null.mode().iloc[0]) # fill missing value with the most frequent value => suitable 1.3 Bạn thêm vào Trường Tuoi (Tuổi) đề xuất cách điền tuổi tác giả? from datetime import date, datetime def calculateAge(birthDate): today = date.today() age = today.year - birthDate.year - ((today.month, today.day) < (birthDate.month, birthDate.day)) return age def str2date(str): return datetime.strptime(str, '%B %d, %Y').date() ages = [] for bDate in df.iloc[:, 2]: ages.append(calculateAge(str2date(bDate))) df['Tuoi'] = ages df.head() Khám phá liệu- Data Exploration 2.1 Giới thiệu Pandas thư viện Python cung cấp cấu trúc liệu nhanh, mạnh mẽ, linh hoạt mang hàm ý Tên thư viện bắt nguồn từ panel data (bảng liệu) Pandas thiết kế để làm việc dễ dàng trực quan với liệu có cấu trúc (dạng bảng, đa chiều, có tiềm khơng đồng nhất) liệu chuỗi thời gian 12 Mục tiêu pandas trở thành khối (building block) cấp cao cho công việc thực tế, phân tích liệu giới thực Python, rộng trở thành công cụ thao tác / phân tích mã nguồn mở mạnh mẽ linh hoạt có sẵn loại ngơn ngữ lập trình Pandas phù hợp với nhiều loại liệu khác nhau: Dữ liệu dạng bảng với cột nhập không đồng nhất, bảng SQL bảng tính Excel Dữ liệu chuỗi thời gian theo thứ tự khơng có thứ tự (khơng thiết phải có tần số cố định) Dữ liệu ma trận tùy ý (được nhập đồng không đồng nhất) với nhãn hàng cột Bất kỳ hình thức khác liệu quan sát / thống kê Dữ liệu thực không cần phải dán nhãn vào cấu trúc liệu pandas Pandas xây dựng dựa NumPy Hai cấu trúc liệu pandas Series (1 chiều) DataFrame (2 chiều) xử lý phần lớn trường hợp điển hình tài chính, thống kê, khoa học xã hội nhiều lĩnh vực kỹ thuật Dưới số chức pandas sử dụng phổ biến : reset_index sort_values groupBy 13 replace head setdefault loc & iloc strptime dropna 10 fillna head() Khi bạn lần nhận liệu mới, bạn muốn nhanh chóng khám phá có cảm giác nội dung Pandas có số phương pháp cho việc Đầu tiên đầu, trả vài hàng DataFrame Chức đầu sử dụng để xem vài hàng liệu sort_values() Điều bạn làm thay đổi thứ tự hàng cách xếp chúng cho liệu thú vị nằm đầu DataFrame Bạn xếp hàng phương pháp sort_values, qua tên cột mà bạn muốn xếp theo reset_index() Nếu bạn muốn chuyển đổi cột liệu làm mục nó, thực thơng qua set_index Trong ví dụ đây, id hành khách đặt làm cột mục Điều hữu ích bạn muốn đặt cột làm mục loc & iloc Với loc iloc, bạn thực hầu hết thao tác lựa chọn liệu DataFrames loc dựa nhãn, có nghĩa bạn phải định hàng cột dựa nhãn hàng cột chúng iloc dựa số số nguyên, bạn phải định 14 hàng cột theo số số nguyên chúng loc iloc cho phép bạn chọn hàng cột từ DataFrame groupBy() Pandas groupBy() hàm sử dụng để chia liệu thành nhóm cách sử dụng số tiêu chí xác định trước Trong ví dụ đây, chúng tơi tính thu nhập trung bình ứng cử viên cách nhóm theo độ tuổi replace() Hàm replace() trả chuỗi ban đầu sau thay chuỗi cũ chuỗi setdefault() Phương thức setdefault() tương tự get(), thiết lập dict[key]=default key không tồn dict strptime() Chuyển kiễu liệu string sang date dropna() Xoá cột chứa liệu rỗng fillna() Điền giá trị NA / NaN phương pháp xác định 15 2.2 Thống kê tác giả câu nói tiếng có liệu Cách tiếp cận: Nhóm dataframe theo tác giả Đếm số lần xuất tác giả (tương ứng với số câu nói tác giả đó) df.groupby('Tacgia').size().reset_index(name='So cau noi') 2.3 Thống kê năm sinh độ tuổi tác giả Cách tiếp cận: Nhóm dataframe theo tác giả Hiển thị trường tuổi năm sinh theo tác giả Sắp xếp theo thứ tự tăng dần tuổi df.groupby('Tacgia').first()[['Namsinh', 'Tuoi']].sort_values('Tuoi', ascending=True) 2.4 Thống kê câu nói tiếng như: câu dài nhất, ngắn nhất, số từ Cách tiếp cận: Đếm số từ câu nói Sắp xếp theo thứ tự giảm dần số từ Lấy câu có số từ nhiều số từ df['Length'] = [len(quote.split()) for quote in df.Quote] quoteByLength = df[['Quote', 'Length']].sort_values('Length', ascending=False).reset_index(drop=True) 16 print('Câu ngắn nhất:', quoteByLength[quoteByLength.Length == min(quoteByLength.Length)]) print('Câu dài nhất', quoteByLength[quoteByLength.Length == max(quoteByLength.Length)]) quoteByLength 2.5 Thống kê từ sử dụng câu nói Cách tiếp cận: Gộp câu nói lại với (string + string) Đếm tần suất từ sau gộp Tạo dataframe chứa từ tần suất vừa tính record = '' for quote in df.Quote: record += ' ' + quote from collections import Counter dictionary = Counter(record.replace('“', '').replace('”', '').replace('.', '').replace(',', '').split()) words = [key for key in dictionary] frequency = [dictionary[key] for key in dictionary] words_frequency = pd.DataFrame({'Words': words, 'Frequency': frequency}) words_frequency 2.6 Phân tích, trực quan mối quan hệ giữa tác giả câu nói tiếng Cách tiếp cận: Bổ sung trường tags cho dataframe Tạo kiểu liệu dictionary chứa tác giả (key) tags tác giả (value) 17 Tạo dataframe chứa tác giả tags vừa tìm df['Tags'] = tags dictionary = {} for au in df.Tacgia: dictionary.setdefault(au, 0) dictionary[au] = ', '.join([tag for tag in df[df.Tacgia == au].Tags]) authors = [key for key in dictionary] tags = [dictionary[key] for key in dictionary] aus_tags = pd.DataFrame({'Author': authors, 'Tags': tags}) aus_tags Cách tiếp cận: Tạo dataframe với trường quote tags dataframe gốc quote_tags = df[['Quote', 'Tags']] quote_tags Cách tiếp cận: Tạo dataframe với trường quote tags dataframe gốc So sánh tag quote với tags tác giả Nếu tag quote tồn tags tác giả đếm Cộng tất lại chia cho số tag quote * 100 tỉ lệ mối quan hệ quote tác giả ( % quote thuộc tác giả) dictionary = {} for i in range(len(aus_tags.Tags)): dictionary.setdefault(aus_tags.Author[i], 0) dictionary[aus_tags.Author[i]] = [int(sum([1 for tag in group_tags.split(', ') if tag in aus_tags.Tags[i]])/len(group_tags.split(', '))*100) for group_tags in quote_tags.Tags] percents = [dictionary[key] for key in dictionary] authors = [key for key in dictionary] dictionary = {} for j in range(len(percents[0])): ... LIỆU Viết code cào liệu từ trang Web, lưu kết vào file tương ứng mô tả ngắn gọn cấu trúc trang Web 1. 1 Code cào liệu 1. 2 Cấu trúc trang Web Với liệu bạn vừa cào. .. BIỂU, HÌNH VẼ, ĐỒ THỊ CHƯƠNG I - THU THẬP DỮ LIỆU Viết code cào liệu từ trang Web, lưu kết vào file tương ứng mô tả ngắn gọn cấu trúc trang Web 1. 1 Code cào liệu from bs4 import BeautifulSoup import... khác liệu quan sát / thống kê Dữ liệu thực không cần phải dán nhãn vào cấu trúc liệu pandas Pandas xây dựng dựa NumPy Hai cấu trúc liệu pandas Series (1 chiều) DataFrame (2 chiều) xử lý phần lớn