Tuesday, 27 December 2016

[Python] Tạo bảng dữ liệu với pandas

pandas là gì

pandas là bộ công cụ để phân tích và chỉnh sửa dữ liệu mạnh nhất thế giới, được sử dụng rộng rãi trong phân tích tài chính, phân tích dữ liệu.

Python pandas

pandas là một Python package.

Cài đặt pandas

(trong virtualenv):
$ pip install pandas
...
Installing collected packages: pandas
Successfully installed pandas-0.19.2
NOTE: pandas phụ thuộc vào package numpy,  tức cài xong pandas thì đã có cả pandas lẫn numpy.

Muốn phân tích thì phải có dữ liệu và hiển thị nó lên bảng thành hàng cột đã rồi làm gì thì làm.
Trong bài đầu tiên của series, ta sẽ sử dụng pandas để tạo một bảng dữ liệu có hàng, cột, giống như Excel hay Google spreadsheet.

Kiểu dữ liệu trong pandas

pandas có hai kiểu dữ liệu chủ chốt
- Series: kiểu dữ liệu một chiều (1D) - chuỗi các giá trị
- DataFrame: kiểu dữ liệu hai chiều (2D) - tức sẽ biểu diễn thành bảng , có hàng / cột trên Excel hay Google spreadsheet.
Code trong bài được viết trên IPython.

Tạo chuỗi dữ liệu với Pandas

Tạo một Series 5 ngày liên tiếp từ ngày 26 tháng 12 năm 2016, dùng function có sẵn "date_range":

In [23]: import pandas as pd

In [33]: dates = pd.date_range('20161226', periods=6)

In [34]: type(dates)
Out[34]: pandas.tseries.index.DatetimeIndex

In [35]: dates
Out[35]:
DatetimeIndex(['2016-12-26', '2016-12-27', '2016-12-28', '2016-12-29',
               '2016-12-30', '2016-12-31'],
              dtype='datetime64[ns]', freq='D')
Các ngày này sẽ được dùng làm một trục của dữ liệu (cụ thể là tên hàng).

Ta cũng có thể tạo Pandas Series từ một list:
In [53]: pd.Series([6,9,1])
Out[53]:
0    6
1    9
2    1
dtype: int64

Tạo bảng dữ liệu với pandas

Để tạo một DataFrame (khi hiển thị giống một bảng), sẽ cần:
- các giá trị số làm dữ liệu trong bảng
- tên các hàng (index)
- tên các cột (column).

Ta sẽ tạo ra một bảng dữ liệu (matrix) có kích thước 6x4 (6 hàng 4 cột), với tên cột là các chữ cái ABCD, tên hàng lần lượt là các ngày đã lưu trong Series ``dates``:
In [36]: df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

In [37]: df
Out[37]:
                   A         B         C         D
2016-12-26  0.043417  0.620126  0.012686 -0.080664
2016-12-27  1.411180  2.400210 -0.647863  0.822057
2016-12-28  0.675524 -0.737174 -0.659257 -1.296264
2016-12-29  1.821968  0.357839 -0.353152  0.865027
2016-12-30  0.561878  0.001481  1.318802  0.728757
2016-12-31 -2.190918  0.316874  0.440114 -0.144588

np.random.randn(6,4) là function của ``numpy`` dùng để sinh bảng dữ liệu ngẫu nhiên với kích thước 6x4.

Ta có thể tạo một bảng dữ liệu đơn giản khác mà không cần dùng đến numpy:
In [52]: pd.DataFrame([[1,2,3], [1,2,3], [1,2,3]] , index=[1,2,3], columns=list('XYZ'))
Out[52]:
   X  Y  Z
1  1  2  3
2  1  2  3
3  1  2  3
Hết.

Happy creating-table!!!

Tham khảo: http://pandas.pydata.org/pandas-docs/stable/10min.html

HVN at http://www.familug.org/ and http://pymi.vn