From f7ab7199453240b9dfa633594bedb16b4f25f430 Mon Sep 17 00:00:00 2001 From: Barbier--Darnal Joseph Date: Sat, 30 Sep 2023 12:08:26 +0200 Subject: [PATCH] pandas homepage --- src/pages/pandas.js | 254 +++++++++++++++++++++++++--------- static/graph/quick-pandas.png | Bin 0 -> 20558 bytes 2 files changed, 185 insertions(+), 69 deletions(-) create mode 100644 static/graph/quick-pandas.png diff --git a/src/pages/pandas.js b/src/pages/pandas.js index 6172466c46..58a0afdb48 100644 --- a/src/pages/pandas.js +++ b/src/pages/pandas.js @@ -5,8 +5,9 @@ import Container from 'react-bootstrap/Container'; import Contact from '../components/Contact'; import Row from 'react-bootstrap/Row'; import ChartFamilySection from '../components/ChartFamilySection'; +import ChartImage from '../components/ChartImage'; import { Link } from 'gatsby'; -import { Plotly } from '../components/MiscellaneousLogos'; +import { Pandas } from '../components/MiscellaneousLogos'; import { Col } from 'react-bootstrap'; import CodeChunk from '../components/CodeChunk'; import Spacing from '../components/Spacing'; @@ -16,13 +17,44 @@ import ChartImageContainer from '../components/ChartImageContainer'; const chartDescription = ( <>

- Beyond its powerful data manipulation capabilities, Pandas offers - convenient plotting methods, enabling users to visualize data directly - from DataFrame and Series objects. + Pandas is a popular open-source Python + library used for data manipulation and analysis. It provides data structures and functions + that make working with structured data, such as tabular data (like Excel spreadsheets or + SQL tables), easy and intuitive. +

+

+ Although not best known for this functionality, Pandas can be used to create graphs and visualize + data, thanks to its lightweight syntax and matplotlib functions.

); +const quickCode = `# library +import pandas as pd +import matplotlib.pyplot as plt + +# Create data +values=[12, 11, 9, 13, 14, 16, 14, 15, 18, 17, 19, 20] +df=pd.DataFrame({'x': range(1,13), 'y': values }) + +# plot +df.plot('x', 'y') +plt.show() +`; + +const plotApi = `df.plot('x', 'y', kind='line') +plt.show() +`; + +const funcnameApi = `df.line('x', 'y') +plt.show() +`; + +const plotFuncnameApi = `df.plot.line('x', 'y') +plt.show() +`; + + export default function Plotlys() { return ( -

This section is under construction and will be available soon.

+

⏱ Quick start

+ + +

+ Pandas is the most famous python data + manipulation and cleaning library. However, it can also be used to + create charts and graphs. Pandas plotting features are a wrapper + around the matplotlib{' '} + library, which is the most popular python library for data visualization. +

+

+ The plot function is the most basic function to + create a chart with pandas. It is a wrapper around the{' '} + matplotlib.pyplot.plot function. +

+ + + + + + +
+ {quickCode} +
+ + + + +

+ + Three distinct syntaxes +

+

+ There are 3 ways to build a chart with pandas: the{' '} + plot method, the function name method + (like line, bar or hist) and the plot + function name method. +

+

+ ➡️ plot method +

+

+ In this case, we have to specify the kind of chart we + want to create. The plot method is a wrapper around the{' '} + matplotlib.pyplot.plot function. The kind{' '} + argument is used to specify the type of chart we want to create. +

+ {plotApi} +
+
+

+ ➡️ function name method +

+

+ The function name method is a bit more straightforward. We just have + to call the right function name to create the chart we want. Matplotlib has + various functions to create different types of charts. For example, the + line function is used to create line charts. +

+ + {funcnameApi} + +
+
+

+ ➡️ plot + function name method +

+

+ This method is a combination of the previous two. We use the{' '} + plot method and need the function name + right after it. +

+ + {plotFuncnameApi} + +
+
+ +

+ The function name method is the most straightforward and + the one we recommend. Most posts on the gallery use this method. +

+ +
+ + + + +

+ + Chart examples with Pandas +

+

+ Pandas offers a wide range of nice charts. Here is a selection of + examples that you can find on the gallery. Click on the images to see the code! +

+ + + + + + + + + + + + + + +
@@ -60,70 +240,6 @@ export default function Plotlys() { ); } -const quickCode = `# Load plotly -import plotly.graph_objects as go - -# Sample data -x = [1.5, 2.9, 3, 4.2, 5.6] -y = [2.2, 13.3, 4.4, 55.3, 52.1] - -# Initialize a figure -fig = go.Figure() - -# Add the scatter trace -fig.add_trace(go.Scatter( - x=x, # Variable in the x-axis - y=y, # Variable in the y-axis - mode='markers', # This explicitly states that we want our observations to be represented by points -)) - -# Show -fig.show() -`; - -const codeInstall = `pip install plotly`; -const saveCode = `fig.write_html("the/path/to/chart-name.html")`; -const embedCode = ``; -const plotlyExpressCode = `# import the plotly express library -import plotly.express as px -# Some dummy data -categories = ['A', 'B', 'C', 'D', 'E'] -values = [15, 22, 18, 12, 28] - -# Plot -fig = px.bar( - x=categories, - y=values, -) - -fig.show() -`; - -const plotlyGoCode = `# import the plotly graph objects lib -import plotly.graph_objects as go - -# Some dummy data -categories = ['A', 'B', 'C', 'D', 'E'] -values = [15, 22, 18, 12, 28] - -# Create a bar chart using the Graph Object API -fig = go.Figure(data=[go.Bar(x=categories, y=values)]) - -# Update layout -fig.update_layout( - title="Simple Bar Chart", - xaxis_title="Categories", - yaxis_title="Values") - - -fig.show() -`; diff --git a/static/graph/quick-pandas.png b/static/graph/quick-pandas.png new file mode 100644 index 0000000000000000000000000000000000000000..026385ad66af954b3396778273f11914ae99c471 GIT binary patch literal 20558 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 L=Wxxz)0h7Ry-wUZ literal 0 HcmV?d00001